2016-03-25 11 views
0

私はjspファイルに1つのc:forEachループを持っています。ここでbeginとend属性を使用して固定ループに制限しています。c:forEarch終了値を動的に変更する

ここでは上記のコードでは、この

count = 3

<c:forEach items="${banners}" var="banner" varStatus="status" begin="0" end="${count}"> 
    <c:choose> 
    <c:when test="${ycommerce:evaluateRestrictions(banner)}"> 
     <!-- code here --> 
    </c:when> 
    <c:otherwise> 
     <c:set var="count" value="${count+1}" /> 
    </c:otherwise>   
</c:forEach> 

のように終わり、その後、私が始める使用することができます私は、バナーのリストを持っている(5と言う)が、私は唯一のトップ3のバナーを表示したいとし、バナー1に制限がある場合は、カウント値+1(+1)を増やして、endが動的に1に増加するようにしています。

しかし、動作しません。カウントは増加していますが、ループは反映されていません。私は、スコープを使用してみました

も同様に属性が、何もループエンド値を動的に変更するように、私はいくつかの解決策を与えることを助けてください

<c:set var="count" value="${count+1}" scope="page" /> 

が起こっていません。

できない場合は、別の方法を教えてください。

+0

@YassinHajaj申し訳ありませんが、私はそれを知らなかったのです。 – user2004685

答えて

1

${count}ループの開始時に評価されるため、ループ中にcountの値を変更しても効果はありません。

Javaの場合とは異なり、endは3つの繰り返しが必要な場合はstart="0" end="2"を使用してください。

フィルタリングと制限の両方を行う場合は、begin/endを使用できません。代わりに、ループ内で自分でやってください:

<c:set var="count" value="${0}" /> 
<c:forEach items="${banners}" var="banner" varStatus="status"> 
    <c:if test="${count lt 3 and ycommerce:evaluateRestrictions(banner)}"> 
     <c:set var="count" value="${count+1}" /> 
     <!-- code here --> 
    </c:if>   
</c:forEach> 
+0

あまりにも早く私のために –

+0

はい、私は同じことをした後、あなたも同じ答えを与えた:) –

関連する問題