我想在一个页面上呈现一个复杂对象的列表:表格、图像、绘图等。每个元素都驻留在它自己的块中(例如<div>)。有几种类型的这样的复杂对象,所以我不想在一个地方实现呈现逻辑,而是以某种方式模块化它(为每种类型的对象单独的JSP以及单独的代码,为JSP准备数据)。我能做到的最好的方法是什么?
我自己的意图是使用<s:action>标签。因此,我可以遍历我的列表,并根据某些条件调用操作:
<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[])。所以我得到了异常:
java.lang.NoSuchMethodException: edu.stackoverflow.RenderTable.setElementValue([Ljava.lang.String;)我不知道为什么org.apache.struts2.components.ActionComponent的实现会以这种方式处理参数,下面是类中的代码:
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()});
}
}因此,这种方法变得不可能了。
有其他选择吗?
发布于 2011-12-26 22:12:43
为什么不直接使用普通的基于JSP的自定义标记呢?
或者,您可以创建一个基于模板的组件。
发布于 2011-12-26 22:34:45
https://stackoverflow.com/questions/8636462
复制相似问题