JSTL Count the ForEach loop
foreach, java, jsp, jstl
Solution
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>
Problem
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 number ``` java.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!