JSTL Count the ForEach loop
12,596
Solution 1
The variable i
is of type LoopTagStatus
. To get an int
, you can use getCount()
or getIndex()
.
If you want to print message for 1st item, then use:
<!-- `${i.index}` starts counting at 0 -->
<c:if test="${i.index % 4 == 0}">
<c:out value="Test" />
</c:if>
else use:
<!-- `${i.count}` starts counting at 1 -->
<c:if test="${i.count % 4 == 0}">
<c:out value="Test" />
</c:if>
Solution 2
varStatus
is of the type LoopTagStatus
(JavaDoc). So you have to use the property count
of i
:
<c:if test="${i.count % 4 == 0}">
<c:out value="Test" />
</c:if>
Comments
-
RaceBase almost 2 years
I am trying to print some message for every 4 items in the List of items
<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>
But I am getting below exceptions, seems like
i
is not treated as numberjava.lang.IllegalArgumentException: Cannot convert javax.servlet.jsp.jstl.core.LoopTagSupport$1Status@3371b822 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)
How do I achieve this?
One way is to declare a variable and increment for every loop with the help of scriplets. But I would like to avoid this!
-
Adrien Be almost 10 yearsBest practice is to use
<c:if test="${i.first}">
to test if first item in loop. see docs.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… -
Van Hung about 7 yearsnice for .count