3

Struts2 で反復処理をネストしました。

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

10個までにしたいですtype。Struts2反復のある時点で中断する方法は? カウンター変数を使用できますが、反復を中断する方法がわかりません。

ありがとう。

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

私の知る限り、あなたは壊すことはできません。あなたの反復はリストの最後まで続きます。

ただし (JSP に到達する前に、Java 側からリストを制限することを選択しない場合)、

によって提供されるオブジェクトのindex(0 ベース) またはcount(1 ベース) プロパティを使用して、レンダリングを 10 要素に制限できます。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 に答える