Utilice JSTL para cada bucle varStatus como ID

104

Quiero usar el recuento del bucle JSTL forEach, pero mi código no parece funcionar.

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

produce

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >
Mark W
fuente
9
Aquí está la clase 'javadoc: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… Mira qué métodos getter ofrece. Sí, entre otros hay un getIndex():)
BalusC

Respuestas:

259

La variable establecida por varStatuses un LoopTagStatusobjeto, no un int. Utilizar:

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

Para aclarar:

  • ${theCount.index}comienza a contar en a 0menos que haya establecido el beginatributo
  • ${theCount.count} comienza a contar en 1
muy cafeinado
fuente
21
${theCount.count} siempre comienza en 1. ${theCount.index}comienza en lo que haya establecido para el beginatributo. por ejemplo<c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">
vegemite4me
8

usarías cualquiera de estos:

JSTL c: propiedades de forEach varStatus

Descripción del Getter de propiedad

  • current getCurrent () El elemento (de la colección) para la ronda actual de iteración.

  • index getIndex () El índice de base cero para la ronda actual de iteración.

  • count getCount () El recuento basado en uno para la ronda actual de iteración

  • first isFirst () Marca que indica si la ronda actual es el primer paso a través de la iteración
  • last isLast () Bandera que indica si la ronda actual es el último paso a través de la iteración

  • begin getBegin () El valor del atributo begin

  • end getEnd () El valor del atributo end

  • step getStep () El valor del atributo step

diego matos - keke
fuente
4

Puedes probar esto. resultado similar

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

Realmente me ayudó a generar identificadores dinámicamente showDetailItempara el siguiente código.

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

si ejecuta esta línea <af:outputText value="#{ttfVs}"/>imprime lo siguiente:

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

jyoti pani
fuente
@HenryKeiter hay una respuesta real aquí. El formato incorrecto solo tenía todo el html oculto hasta que lo arreglé.
Dan está tocando el violín a la luz del fuego
Esto proporciona exactamente la misma respuesta que ya se proporcionó 3 años antes (uso varStatus.count), solo que mucho menos legible. ¿Por qué molestarse en leer las respuestas de otras personas? ;)
rustyx