我在 Struts2 中有嵌套迭代:
<s:iterator var="gift" value="user.gift">
<s:iterator value="giftItems">
<s:property value="type"/>
</s:iterator>
</s:iterator>
我只想拥有最多 10 个type
。如何在 Struts2 Iteration 中的某个时间点中断?我可以有一个计数器变量,但不知道在迭代中中断。
谢谢。
如果您在开始迭代之前知道何时中断,则可以使用 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>
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 中所做的那样)。