Cómo obtener un valor de índice de foreach loop en jstl

106

Tengo un valor establecido en el requestobjeto como el siguiente,

String[] categoriesList=null;
categoriesList = engine.getCategoryNamesArray();
request.setAttribute("categoriesList", categoriesList );

y así es como repito en la página jsp

<% if(request.getAttribute("categoriesList") != null) { %>
<c:forEach var="categoryName" items="${categoriesList}">
   <li><a onclick="getCategoryIndex()" href="#">${categoryName}</a></li>
</c:forEach>
<% }%>

¿Cómo obtengo el índice de cada elemento y lo paso a la función JavaScript onclick="getCategoryIndex()"?

Preguntas de Java
fuente

Respuestas:

234

use varStatus para obtener el índice c: forEach varStatus properties

<c:forEach var="categoryName" items="${categoriesList}" varStatus="loop">
    <li><a onclick="getCategoryIndex(${loop.index})" href="#">${categoryName}</a></li>
</c:forEach>
Nuevo Usuario
fuente
Me sale este Uncaught ReferenceError: bucle no se define `1 y por su esfuerzo
Preguntas Java
onClick del elemento mostrado
Preguntas de Java
Porque el valor varStatus contiene valor hasta la iteración del ciclo. Después de eso, el valor no es válido. así que solo tú tienes la excepción. Para qué propósito necesita el índice
newuser
Necesito saber el índice [ubicación] de cada elemento que viene en String Array.
Preguntas de Java
funciona :) si lo hago de esta manera onclick = "getCategoryIndex ($ {loop.index})" ... gracias por la ayuda
Preguntas de Java
19

Me enfrento a un problema similar ahora, entiendo que tenemos algunas opciones más: varStatus = "loop", aquí habrá una variable que contendrá el índice de lop.

Se puede usar para leer el índice base Zeor o 1 índice base.

${loop.count}` it will give 1 starting base index.

${loop.index} it will give 0 base index as normal Index of array empezar desde 0.

Por ejemplo :

<c:forEach var="currentImage" items="${cityBannerImages}" varStatus="loop">
<picture>
   <source srcset="${currentImage}" media="(min-width: 1000px)"></source>
   <source srcset="${cityMobileImages[loop.count]}" media="(min-width:600px)"></source>
   <img srcset="${cityMobileImages[loop.count]}" alt=""></img>
</picture>
</c:forEach>

Para obtener más información, consulte este enlace

Laxman G
fuente
11

Puede usar el varStatusatributo de esta manera: -

<c:forEach var="categoryName" items="${categoriesList}" varStatus="myIndex">

myIndex.index le dará el índice. Aquí myIndexhay un objeto LoopTagStatus .

Por lo tanto, puede enviar eso a su método javascript de esta manera: -

<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>
SudoRahul
fuente
Recibo esto Uncaught ReferenceError: myIndex is not defined y +1 por su esfuerzo
Preguntas de Java
0
<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

la línea anterior me estaba dando un error. Así que escribí a continuación lo que funciona bien para mí.

<a onclick="getCategoryIndex('<c:out value="${myIndex.index}"/>')" href="#">${categoryName}</a>

Quizás alguien más pueda tener el mismo error. ¡Miren a estos chicos!

Rakesh Kumar
fuente
0

Esto funciona para mi:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Pradeep
fuente