104 votes

Utiliser la variable varStatus de la boucle forEach de JSTL comme ID

Je veux utiliser le compte de la boucle forEach de JSTL, mais mon code ne semble pas fonctionner.

<c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
    <div id="divIDNo${theCount}">
    </div>
</c:forEach>

produit

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >

9 votes

Voici la javadoc de la classe : download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/ Regardez les méthodes de getter qu'il propose. Oui, entre autres, il y a un getIndex() :)

260voto

highlycaffeinated Points 11645

La variable fixée par varStatus est un LoopTagStatus et non un int. Utilisez :

<div id="divIDNo${theCount.index}">

Pour clarifier :

  • ${theCount.index} commence à compter à 0 à moins que vous n'ayez défini l'option begin attribut
  • ${theCount.count} commence à compter à 1

21 votes

${theCount.count} siempre commence à 1. ${theCount.index} commence à la date à laquelle vous avez défini l'option begin par exemple <c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">

10voto

diego matos - keke Points 1758

Vous utiliseriez n'importe lequel de ceux-ci :

JSTL c:forEach varStatus propriétés

Description de la propriété Getter

  • current getCurrent() L'élément (de la collection) pour l'élément courant. cycle d'itération actuel.

  • index getIndex() L'index basé sur zéro pour le tour actuel de l'itération en cours.

  • count getCount() Le compte à base unique pour le cycle d'itération en cours

  • first isFirst() Drapeau indiquant si le tour en cours est le premier passage de l'itération

  • last isLast() Drapeau indiquant si le tour actuel est le dernier passage de l'itération.

  • begin getBegin() La valeur de l'attribut begin

  • end getEnd() La valeur de l'attribut end

  • step getStep() La valeur de l'attribut step

5voto

Nathanphan Points 527

Vous pouvez essayer ceci. Résultat similaire

 <c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
    <div id="divIDNo${theCount.count}"></div>
 </c:forEach>

1voto

jyoti pani Points 1

Cela m'a vraiment aidé à générer dynamiquement les identifiants de l'utilisateur. showDetailItem pour le code ci-dessous.

<af:forEach id="fe1" items="#{viewScope.bean.tranTypeList}" var="ttf" varStatus="ttfVs" > 
<af:showDetailItem  id ="divIDNo${ttfVs.count}" text="#{ttf.trandef}"......>

si vous exécutez cette ligne <af:outputText value="#{ttfVs}"/> imprime le dessous :

{index=3, count=4, last=false, first=false, end=8, step=1, begin=0}

0 votes

@HenryKeiter il y a une vraie réponse ici. Un mauvais formatage avait juste caché tout le html jusqu'à ce que je le corrige.

0 votes

Cela donne exactement la même réponse que celle qui avait déjà été fournie 3 ans auparavant (utiliser varStatus.count ), mais beaucoup moins lisible. Pourquoi s'embêter à lire les réponses des autres ? ;)

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