Verwenden Sie den varStatus der JSTL forEach-Schleife als ID

103

Ich möchte die Anzahl aus der JSTL forEach-Schleife verwenden, aber mein Code scheint nicht zu funktionieren.

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

produziert

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >
Mark W.
quelle
9
Hier ist die Klasse 'javadoc: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… Schauen Sie, welche Getter-Methoden sie bietet. Ja, unter anderem gibt es eine getIndex():)
BalusC

Antworten:

258

Die von festgelegte Variable varStatusist ein LoopTagStatusObjekt, kein int. Verwenden:

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

Zu klären:

  • ${theCount.index}beginnt zu zählen, es 0sei denn, Sie haben das beginAttribut festgelegt
  • ${theCount.count} beginnt bei zu zählen 1
stark koffeinhaltig
quelle
21
${theCount.count} beginnt immer bei 1. ${theCount.index}beginnt bei allem, auf das Sie das beginAttribut gesetzt haben. zB<c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">
vegemite4me
8

Sie würden eines dieser verwenden:

JSTL c: Für jede varStatus-Eigenschaft

Property Getter Beschreibung

  • current getCurrent () Das Element (aus der Sammlung) für die aktuelle Iterationsrunde.

  • index getIndex () Der auf Null basierende Index für die aktuelle Iterationsrunde.

  • count getCount () Die einbasierte Zählung für die aktuelle Iterationsrunde

  • first isFirst () Flag, das angibt, ob die aktuelle Runde der erste Durchgang durch die Iteration ist
  • last isLast () Flag, das angibt, ob die aktuelle Runde der letzte Durchgang durch die Iteration ist

  • begin getBegin () Der Wert des Attributs begin

  • end getEnd () Der Wert des end-Attributs

  • step getStep () Der Wert des step-Attributs

diego matos - keke
quelle
4

Sie können dies versuchen. ähnliches Ergebnis

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

Es hat mir wirklich geholfen, IDs showDetailItemfür den folgenden Code dynamisch zu generieren .

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

Wenn Sie diese Zeile ausführen, wird <af:outputText value="#{ttfVs}"/>Folgendes gedruckt:

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

Jyoti Pani
quelle
@ HenryKeiter hier gibt es eine echte Antwort. Bei einer schlechten Formatierung wurde nur das gesamte HTML-Format ausgeblendet, bis ich es behoben habe.
Dan spielt am Feuer
Dies liefert genau die gleiche Antwort wie bereits 3 Jahre zuvor (Verwendung varStatus.count), nur viel weniger lesbar. Warum sich die Mühe machen, die Antworten anderer Leute zu lesen? ;)
Rustyx