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()"?

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>

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


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>

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!


0

Esto funciona para mi:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.