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

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

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


4

Vous pouvez essayer ceci. résultat similaire

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

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}


@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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.