如何动态更改c:forEarch结束值

时间:2016-03-25 08:42:48

标签: jsp foreach count jstl

我的jsp文件中有一个c:forEach循环,我使用begin和end属性将循环限制为某个固定计数。

假设我有横幅列表(比如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),这样end将动态增加到一。

但它不起作用。虽然数量正在增加,但循环没有反映。

我也尝试使用范围属性,但没有发生任何事情

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

请帮我提供一些解决方案,以便循环结束值动态变化。

如果不可能,请建议我另外一些选择。

1 个答案:

答案 0 :(得分: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>