2016-03-25 41 views
0

我有一個c:forEach循環在我的jsp文件中,我使用begin和end屬性來限制循環爲一些固定數量。如何更改c:forEarch最終值動態

假設我有橫幅的清單(比如5),但我想只顯示前3名的橫幅,然後我就可以使用開始,結束這樣

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> 

在這裏,在上面的代碼,如果橫幅1有限制,那麼我想增加計數值加1(+1),這樣end將動態增加到1。

但它不工作。雖然計數正在增加,但循環不反映。

我試着用scope屬性很好,但什麼都沒有發生

<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

是的,我做了同樣的事情之後,你也給了同樣的答案:) –