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.