3

我在 Struts2 中有嵌套迭代:

<s:iterator var="gift" value="user.gift">
    <s:iterator value="giftItems">
        <s:property value="type"/>
    </s:iterator>
</s:iterator>

我只想拥有最多 10 个type。如何在 Struts2 Iteration 中的某个时间点中断?我可以有一个计数器变量,但不知道在迭代中中断。

谢谢。

4

2 回答 2

6

如果您在开始迭代之前知道何时中断,则可以使用 begin 和 end 属性。如果必须在迭代中计算中断,请在每次迭代之前设置一个变量并检查其值。在后一种情况下,循环在技术上不会“中断”,但效果是一样的。

<s:set var = "breakLoop" value = "%{false}" />
<s:iterator....>
<s:if test = "!#breakLoop">
     //process here and change the var to true based on some codition
    <s:set var = "breakLoop" value = "%{true}"/>
</s:if>
</s:iterator>
于 2013-01-18T07:57:05.827 回答
1

AFAIK,你不能打破。您的迭代将持续到列表的末尾。

但是(如果您不选择从 Java 端限制列表,在到达 JSP 之前),

您可以使用提供的对象的index(0-based) 或count(1-based) 属性将渲染限制为十个元素:StatusIterator<s:iterator />

每个 giftItem限制为 10 种类型:

<s:iterator var="gift" value="user.gift">
    <s:iterator value="giftItems" status="ctr">
        <s:if test="#ctr.index < 10">
            <s:property value="type"/>
        </s:if>
    </s:iterator>
</s:iterator>

完全限制为 10 种类型(根据评论中的要求):

<s:set var="rowPrinted" value="0"/>
<s:iterator var="gift" value="user.gift" >
    <s:iterator value="giftItems" >
        <s:if test="#rowPrinted < 10">
            <s:property value="type"/>
            <s:set var="rowPrinted" value="%{#rowPrinted + 1}"/>
        </s:if>
    </s:iterator>
</s:iterator>

如您所见,您可以简单地声明一个基于 0 的变量,检查它是否低于限制,然后递增它(就像在 Java 中所做的那样)。

于 2013-01-18T09:28:07.730 回答