Struts2迭代字符串数组(不是字符串数组)

时间:2014-04-30 14:05:27

标签: arrays jsp struts2 iterator

在Struts2官方文档中,我找到了以下代码片段:

<s:iterator value="{1,2,3,4,5}" begin="2" end="4" >
   <!-- current iteration value (2,3,4) -->
   <s:property value="top" />
</s:iterator>

这会迭代值1到5.从该示例中,我认为{}括号之间的任何字符串都将被视为数组。

我在Struts2中设置了一个包含与上面类似的字符串值的变量,但是迭代器总是把它看作1个元素而不是元素数组。以下示例均未按预期工作。我使用了%{#}的所有不同组合。

<s:set var="testa">{6,7,8,9,10}</s:set>
<s:iterator value="testa">
    <!-- <s:property/> -->
</s:iterator>

<s:set var="testb">{A,B,C,D,E}</s:set>
<s:iterator value="#testb">
    <!-- <s:property/> -->
</s:iterator>

<s:set var="testc">{F,G,H,I,J}</s:set>
<s:iterator value="%{#testc}">
    <!-- <s:property/> -->
</s:iterator>

<s:set var="testd">{K,L,M,N,O}</s:set>
<s:iterator value="%{testd}">
    <!-- <s:property/> -->
</s:iterator>

我期望的结果是:

<!-- 6 -->
<!-- 7 -->
<!-- 8 -->
<!-- 9 -->
... and so on

但我真正得到的是:

<!-- {6,7,8,9,10} -->
<!-- {A,B,C,D,E} -->
... and so on

我做错了什么?

请注意我没有寻找迭代java对象列表的方法(我知道如何做),我真的想迭代一个数组的文本表示。

1 个答案:

答案 0 :(得分:1)

括号中的任何字符串都会保留字符串,直到为OGNL表达式解析此字符串。在第一个示例中,括号括起来的字符串被评估为返回列表的OGNL表达式。迭代此列表并打印结果。 Struts标记解析标记属性中的OGNL表达式 ,因此它不会解析标记体。如果您需要在标记正文中进行解析,则可以使用property标记。因此,将字符串视为列表的所有尝试都失败了。 iterator标记只接受java对象的集合,不能迭代字符串,因为字符串没有迭代器。

  

我真的想迭代一个数组的文本表示

所以只有将文本表示转换为数组才能实现。 iterator标记可以迭代数组。

<s:set var="testa">{6,7,8,9,10}</s:set>
<s:iterator value="%{#testa.replaceAll('[\\\{\\\}]','').split(',')}">
    <!-- <s:property/> -->
</s:iterator>