循环增量计数器

Lon*_*don 63 java jsp jstl

这个问题与我之前的问题有关:

Jsp迭代对象列表

我想在我的for循环中插入从0开始的计数器,到目前为止我尝试了几种组合:

1.

<c:forEach var="tableEntity" items='${requestScope.tables}'>
   <c:forEach var="rowEntity" items='${tableEntity.rows}' varStatus="count">            
        <c:out value="${count}" />
    </c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

2.

<c:set var="count" value="0" scope="page" />
<c:forEach var="tableEntity" items='${requestScope.tables}'>
   <c:forEach var="rowEntity" items='${tableEntity.rows}'>      
   <%=count++%>  
<c:out value="${count}" />
    </c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

第一种方法的问题是外部循环有3个项目,内部循环有7个项目,因此对于每个外部项目,计数从0开始.第二个我得到编译错误.这基本上是我想要的:

counter = 0;
outer for loop 
    inner for loop 
       counter++;
       //cout/echo/print counter value should start from 0
    end inner loop
end outer loop
Run Code Online (Sandbox Code Playgroud)

我只是不完全熟悉语法.谢谢

dog*_*ane 166

请尝试以下方法:

<c:set var="count" value="0" scope="page" />

//in your loops
<c:set var="count" value="${count + 1}" scope="page"/>
Run Code Online (Sandbox Code Playgroud)

  • 这正是我所寻找的tnx (6认同)
  • 请参阅BalusC的答案以获得更清洁的解决方案.即,使用varStatus (3认同)
  • 我不知道..这实际上看起来更干净更容易 (2认同)

Bal*_*usC 40

其中的varStatus引用LoopTagStatus有一个getIndex()方法.

所以:

<c:forEach var="tableEntity" items='${requestScope.tables}' varStatus="outer">
   <c:forEach var="rowEntity" items='${tableEntity.rows}' varStatus="inner">            
        <c:out value="${(outer.index * fn:length(tableEntity.rows)) + inner.index}" />
    </c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 在您的原始问题中,您有2个循环.答案就是针对这一点的.如果你有更多的嵌套循环,那么你必须在计算中考虑它们,然后dogbane的答案确实不那么复杂(但是如果你没有`count,`scope ="page"`是多余的`在其他范围内的属性,然后你可以安全地删除它). (2认同)