首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >struts2:动态块页面结构

struts2:动态块页面结构
EN

Stack Overflow用户
提问于 2011-12-26 22:06:55
回答 2查看 405关注 0票数 0

我想在一个页面上呈现一个复杂对象的列表:表格、图像、绘图等。每个元素都驻留在它自己的块中(例如<div>)。有几种类型的这样的复杂对象,所以我不想在一个地方实现呈现逻辑,而是以某种方式模块化它(为每种类型的对象单独的JSP以及单独的代码,为JSP准备数据)。我能做到的最好的方法是什么?

我自己的意图是使用<s:action>标签。因此,我可以遍历我的列表,并根据某些条件调用操作:

代码语言:javascript
复制
<s:iterator value="objectList" var="element">
        <s:if test="#element.type == 'TABLE'">
            <s:action name="renderTable"><s:param name="elementValue" value="#element.value"/></s:action>
        </s:if>
        ...
</s:iterator>

显然,为了渲染表或绘图或任何其他元素,我需要将数据传递给呈现操作-您可以看到,我正在尝试将entries传递给我的renderTable操作。问题来了- Struts将这个参数转换为字符串数组,并试图在我的操作中找到setElementValue(String[])。所以我得到了异常:

代码语言:javascript
复制
java.lang.NoSuchMethodException: edu.stackoverflow.RenderTable.setElementValue([Ljava.lang.String;)

我不知道为什么org.apache.struts2.components.ActionComponent的实现会以这种方式处理参数,下面是类中的代码:

代码语言:javascript
复制
    for (Iterator i = parameters.entrySet().iterator(); i.hasNext(); ) {
        Map.Entry entry = (Map.Entry) i.next();
        String key = (String) entry.getKey();
        Object val = entry.getValue();
        if (val.getClass().isArray() && String.class == val.getClass().getComponentType()) {
            params.put(key, (String[])val);
        } else {
            params.put(key, new String[]{val.toString()});
        }
    }

因此,这种方法变得不可能了。

有其他选择吗?

EN

回答 2

Stack Overflow用户

发布于 2011-12-26 22:12:43

为什么不直接使用普通的基于JSP的自定义标记呢?

或者,您可以创建一个基于模板的组件。

票数 2
EN

Stack Overflow用户

发布于 2011-12-26 22:34:45

我相信,在jsp中创建自定义标记代替基于模板的组件是最好的方法,它将使您能够更好地控制整体结构。

或者,您可以创建自定义UI组件。

creating_a_ui_component

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8636462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档