我正在尝试为项目列表中的每4项打印一些消息
<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>
但我得到的是异常,似乎i
不被视为数字
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)
我如何实现这一目标?
一种方法是在scriplets的帮助下为每个循环声明一个变量和增量。但我想避免这个!
答案 0 :(得分: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>
答案 1 :(得分:2)
varStatus
的类型为LoopTagStatus
(JavaDoc)。因此,您必须使用count
的属性i
:
<c:if test="${i.count % 4 == 0}">
<c:out value="Test" />
</c:if>