Java 使用嵌套循环交替JSTL中的行颜色
我想为每一行交替行颜色,我知道如何在forEach循环中使用varStatus来交替行颜色。但是现在,我有了一个嵌套循环Java 使用嵌套循环交替JSTL中的行颜色,java,jsp,jstl,Java,Jsp,Jstl,我想为每一行交替行颜色,我知道如何在forEach循环中使用varStatus来交替行颜色。但是现在,我有了一个嵌套循环 <c:forEach var="aPermission" items="${Permissions}" varStatus="loop1"> <c:forEach var="anIpRange" items="${aPermission.ipRanges}" varStatus="loop2"> <tr class="${loop
<c:forEach var="aPermission" items="${Permissions}" varStatus="loop1">
<c:forEach var="anIpRange" items="${aPermission.ipRanges}" varStatus="loop2">
<tr class="${loop2.index % 2 == 0 ? 'row0' : 'row1'}"> [...]
</c:forEach>
</c:forEach>
[...]
上面的代码仅使用“loop2”varStatus,只是一个近似值。如何解决这个问题?我必须引入我的计数变量,否则有更好的方法吗?- 存储所有迭代项的总和(使用
)。您可以在外循环中通过计算
来实现这一点。在内部循环之后执行此操作currentSum=currentSum+fn:length(aPermission.ipRanges)
- 使用
检查每行的颜色currentSum+loop2.index
- 有一种单线方式
UPD。我第一次错了。没有冗余变量的解决方案是正确的
<tr class="${(loop2.index*fn:length(aPermission.ipRanges) + loop1.index) % 2 == 0 ? 'row0' : 'row1'}">
只需使用专用计数器即可:
<c:set var="counter" value="${0}"/>
<c:forEach var="aPermission" items="${Permissions}" varStatus="loop1">
<c:forEach var="anIpRange" items="${aPermission.ipRanges}" varStatus="loop2">
<tr class="${counter % 2 == 0 ? 'row0' : 'row1'}"> [...] </tr>
<c:set var="counter" value="${counter + 1}"/>
</c:forEach>
</c:forEach>
[...]
我考虑过,但这种方法不起作用,因为例如:loop1从0开始,loop2从0开始,0+0=0,第二行loop1是0,loop2是1,1+0=1,第三行loop1是1,loop2是0,0+1=1。arghh具有相同颜色的两个连续行。很抱歉,这也不起作用,因为您假设每个权限具有相同数量的ipRanges,这是不正确的。它可以有1到1之间的任何数字,每个权限可以有不同的数字。无论如何,谢谢你的帮助!啊。那个么计数器是非常必要的:)这会起作用,但似乎比使用专用计数器更复杂。我试过了,它能起作用,谢谢。我想知道是否真的有必要说value=“${0}”,而不仅仅是value=“0”。这是关于数据类型,数字与字符串的关系吗?因为我也尝试了value=“0”,但仍然有效。它有效,但对我来说使用${0}似乎更符合逻辑,因为我发现表达式的类型更明显。