Utiliser le varStatus de la boucle JSTL forEach comme ID

104

Je veux utiliser le décompte de la boucle JSTL forEach, 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" >
Mark W
la source
9
Voici la classe 'javadoc: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/... Regardez les méthodes getter qu'elle propose. Oui, entre autres, il y a getIndex():)
BalusC

Réponses:

259

La variable définie par varStatusest un LoopTagStatusobjet, pas un int. Utilisation:

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

Clarifier:

  • ${theCount.index}commence à compter à 0moins que vous n'ayez défini l' beginattribut
  • ${theCount.count} commence à compter à 1
hautement caféiné
la source
21
${theCount.count} commence toujours à 1. ${theCount.index}commence à ce que vous avez défini l' beginattribut. eg<c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">
vegemite4me
8

vous utiliseriez l'un de ceux-ci:

Propriétés JSTL c: forEach varStatus

Description de la propriété Getter

  • current getCurrent () L'élément (de la collection) pour le cycle d'itération en cours.

  • index getIndex () Index de base zéro pour le cycle d'itération en cours.

  • count getCount () Le nombre basé sur un pour le cycle d'itération actuel

  • first isFirst () Drapeau indiquant si le tour en cours est le premier passage de l'itération
  • last isLast () Indicateur indiquant si le tour en cours 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

diego matos - keke
la source
4

Vous pouvez essayer ceci. résultat similaire

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

Cela m'a vraiment aidé à générer dynamiquement des identifiants showDetailItempour 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 ce qui suit:

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

jyoti pani
la source
@HenryKeiter il y a une vraie réponse ici. Un mauvais formatage avait juste tout le HTML caché jusqu'à ce que je le corrige.
Dan Is Fiddling By Firelight
Cela fournit exactement la même réponse que celle déjà fournie 3 ans plus tôt (utilisation varStatus.count), mais beaucoup moins lisible. Pourquoi se donner la peine de lire les réponses des autres? ;)
rustyx