【问题标题】:Struts2 iterating over a string array (not an array of strings)Struts2 遍历字符串数组(不是字符串数组)
【发布时间】:2014-06-16 21:45:52
【问题描述】:

在 Struts2 官方文档中,我找到了以下 sn-p 代码:

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

【问题讨论】:

    标签: arrays jsp struts2 iterator


    【解决方案1】:

    括号中的任何字符串都保留为字符串,直到该字符串被解析为 OGNL 表达式。在第一个示例中,用括号括起来的字符串计算为返回列表的 OGNL 表达式。迭代此列表并打印结果。 Struts 标签在标签的属性中解析 OGNL 表达式only,因此它不会解析标签正文。如果需要在标签正文中解析,可以使用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>
    

    【讨论】:

    • 你最后的代码示例让我很清楚。我以为 OGLN 会将字符串解析为一个数组,但它所做的只是将它解析为.. 一个普通字符串 ;(!我没有完全意识到使用 OGNL 的强大功能,因为您可以调用诸如 split( ) 以获得所需的结果。谢谢!
    • 从 JSP 调用任何方法已经是 OGNL 了,它是一种力量。
    猜你喜欢
    • 2023-03-23
    • 2015-09-09
    • 1970-01-01
    • 2017-10-06
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多