JSTL中的交替行颜色与嵌套循环

时间:2011-05-28 09:19:05

标签: java jsp jstl

我想为每一行替换行颜色,我知道如何在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,并且只是一个近似值。如何解决问题?我要介绍我的计数变量还是有更好的方法?

3 个答案:

答案 0 :(得分:5)

只需使用专用计数器:

<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>

答案 1 :(得分:2)

  • 存储所有迭代项目的总和(使用<c:set>)。您可以通过计算currentSum = currentSum + fn:length(aPermission.ipRanges)在外部循环中执行此操作。在内循环之后执行此操作
  • 使用currentSum + loop2.index检查每行的颜色。

答案 2 :(得分:1)

有1行方式。

<强> UPD 即可。我第一次弄错了。有没有冗余变量的正确解决方案。

<tr class="${(loop2.index*fn:length(aPermission.ipRanges) + loop1.index) % 2 == 0 ? 'row0' : 'row1'}">