在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对象列表的方法(我知道如何做),我真的想迭代一个数组的文本表示。
答案 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>