Java 使用嵌套循环交替JSTL中的行颜色

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

我想为每一行交替行颜色,我知道如何在forEach循环中使用varStatus来交替行颜色。但是现在,我有了一个嵌套循环

<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}似乎更符合逻辑,因为我发现表达式的类型更明显。