我的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" />
请帮我提供一些解决方案,以便循环结束值动态变化。
如果不可能,请建议我另外一些选择。
答案 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>