web-dev-qa-db-fra.com

Incrément compteur avec boucle

Cette question est liée à ma question précédente:

Jsp iterate dans la liste d'objets

Je veux insérer un compteur qui commence à 0 dans ma boucle for, j'ai déjà essayé plusieurs combinaisons:

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>

Le problème avec la première approche est que la boucle externe a 3 éléments et la boucle interne a 7 éléments, donc pour chaque élément externe, le compte commence à 0. Le second est une erreur de compilation. Voici essentiellement ce que je veux:

counter = 0;
outer for loop 
    inner for loop 
       counter++;
       //cout/echo/print counter value should start from 0
    end inner loop
end outer loop

Je ne suis tout simplement pas totalement familiarisé avec la syntaxe. Je vous remercie

62
London

Essayez ce qui suit:

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

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

Le varStatus fait référence à LoopTagStatus qui a une méthode getIndex().

Alors:

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

Voir également:

39
BalusC

Vous pouvez utiliser varStatus dans votre boucle c: forEach

Dans votre premier exemple, vous pouvez obtenir le bon fonctionnement du compteur comme suit:.

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

ce qui m’a conduit à cette page est que j’ai placé dans une page puis à l’intérieur d’une page incluse, j’ai fait l’incrément

et voici le problème

pour résoudre un tel problème, utilisez simplement scope="request" lorsque vous déclarez la variable ou l'incrément

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

espérons que cela vous fera gagner du temps

0