2014-02-06 166 views
6

我試圖在項目JSTL計數foreach循環

<c:forEach items="${categoryList}" var="category" varStatus="i"> 
    <c:if test="${i%4 == 0}"> 
     <c:out value="Test" /> 
    </c:if> 
    <div class="span3"> 
     <c:out value="a" /> 
    </div> 
</c:forEach> 

的列表,打印一些消息,每4項,但我得到下面的異常,好像i並不像數字處理

java.lang.IllegalArgumentException: Cannot convert [email protected] of type class javax.servlet.jsp.jstl.core.LoopTagSupport$1Status to Number 
    at org.apache.el.lang.ELArithmetic.coerce(ELArithmetic.java:407) 
    at org.apache.el.lang.ELArithmetic.mod(ELArithmetic.java:291) 
    at org.apache.el.parser.AstMod.getValue(AstMod.java:41) 
    at org.apache.el.parser.AstEqual.getValue(AstEqual.java:38) 

我該如何做到這一點?

一種方法是在scriplets的幫助下爲每個循環聲明一個變量和增量。但我想避免這個!

+0

你可以聲明一個變量,並使用JSTL以及 – Sanjeev

回答

14

變量i的類型是LoopTagStatus。要獲得int,您可以使用getCount()getIndex()

如果你要打印消息1 ST項目,然後使用:

<!-- `${i.index}` starts counting at 0 --> 
<c:if test="${i.index % 4 == 0}"> 
    <c:out value="Test" /> 
</c:if> 

其他用途:

<!-- `${i.count}` starts counting at 1 --> 
<c:if test="${i.count % 4 == 0}"> 
    <c:out value="Test" /> 
</c:if> 
+2

+1該指數增加它和計數差異點 – Reddy

+0

最佳做法是使用''來測試循環中的第一項。請參閱http://docs.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html –

+0

nice .count –

2

varStatus是類型LoopTagStatusJavaDoc)的。所以,你必須使用counti的財產:

<c:if test="${i.count % 4 == 0}"> 
    <c:out value="Test" /> 
</c:if>