循环增量计数器

时间:2011-02-01 12:33:00

标签: java jsp jstl

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

Jsp iterate trough object list

我想在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>

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>

第一种方法的问题是外部循环有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

我对语法并不完全熟悉。谢谢

4 个答案:

答案 0 :(得分:165)

尝试以下方法:

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

//in your loops
<c:set var="count" value="${count + 1}" scope="page"/>

答案 1 :(得分:39)

varStatusLoopTagStatus方法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>

另见:

答案 2 :(得分:3)

您可以在c:forEach循环中使用varStatus

在您的第一个示例中,您可以使计数器正常工作,如下所示......

<c:forEach var="tableEntity" items='${requestScope.tables}'>
   <c:forEach var="rowEntity" items='${tableEntity.rows}' varStatus="count">            
        my count is ${count.count}
    </c:forEach>
</c:forEach>

答案 3 :(得分:0)

是什么让我进入这个页面是我在一个页面中设置然后在包含页面的内部我做了增量

这是问题

所以要解决这个问题,只需在声明变量或增量时使用scope="request"

//when you set the variale add scope="request"
<c:set var="nFilters" value="${0}" scope="request"/>
//the increment, it can be happened inside an included page
<c:set var="nFilters" value="${nFilters + 1}"  scope="request" />

希望这可以节省您的时间