Struts2在迭代器内部进行条件检查

时间:2012-02-13 19:05:45

标签: struts2 conditional iteration

我在jsp中有一个表,我在其中使用s:iterator标记显示列表中的数据。该列表已按说明排序,我需要能够在每组描述上方的表格中显示一行。例如(想象一下这是一张表):

标题1 -----
1标题1 2标题1 3标题1 Heading2 -----
4标题2
5标题2
Heading3 -----

我想要做的是遍历列表并将当前描述与之前的描述进行比较,如果它们不同,则将当前描述显示为新行。

我尝试了一些不同的变体 - 这不起作用:

<s:iterator value="myList" status="rowStatus">
<s:if test="{myList[%{#rowStatus.index}].description != myList[%{#rowStatus.index-1}].description}">
     <tr>
          <td colspan="7"><s:text name="description"/></td>
     </tr>
 </s:if>

我觉得我非常接近,但我似乎无法弄清楚正确的语法。我在这里失踪了什么?

提前致谢!

* j

1 个答案:

答案 0 :(得分:4)

OGNL表达式应该是整个"test"属性:

<s:iterator value="myList" status="rowStatus">
  <s:if test="%{myList[#rowStatus.index].description != myList[#rowStatus.index-1].description}">
    ... etc ...

那就是说,JSP中似乎有很多噪音;我会考虑这样的事情:

<s:iterator value="myList" status="rowStatus">
  <s:if test="%{#cur != description}">
      ... etc ...
  </s:if>
  <s:set var="cur" value="description"/>
</s:iterator>

还有其他选项,包括在Java端设置标志。