64 votes

Compteur d'incrémentation avec boucle

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

Jsp itérer à travers une liste d'objets

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

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. La deuxième approche me donne une erreur de compilation. Voici en gros 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 pas totalement familier avec la syntaxe. Merci.

168voto

dogbane Points 85749

Essayez ce qui suit :

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

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

40voto

BalusC Points 498232

El varStatus références à LoopTagStatus qui a un getIndex() méthode.

Donc :

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

4voto

Andy Brudtkuhl Points 1714

Vous pouvez utiliser varStatus dans votre boucle c:forEach.

Dans votre premier exemple, vous pouvez faire fonctionner le compteur correctement 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>

0voto

Basheer AL-MOMANI Points 5565

Ce qui m'a conduit à cette page est que j'ai mis à l'intérieur d'une page puis à l'intérieur d'une page incluse j'ai fait l'incrémentation

et voici le problème

donc pour résoudre un tel problème, il suffit d'utiliser 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" />

J'espère que cela vous fera gagner du temps

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X