Come ottenere un valore di indice dal ciclo foreach in jstl


107

Ho un valore impostato requestnell'oggetto come il seguente,

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

ed è così che itero nella pagina jsp

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

Come ottengo l'indice di ogni elemento e lo passo alla funzione JavaScript onclick="getCategoryIndex()".

Risposte:


235

utilizzare varStatus per ottenere l'indice c: forEach proprietà varStatus

<c:forEach var="categoryName" items="${categoriesList}" varStatus="loop">
    <li><a onclick="getCategoryIndex(${loop.index})" href="#">${categoryName}</a></li>
</c:forEach>

Ho capito che questo Uncaught ReferenceError: ciclo non è definito `e +1 per il tuo impegno
Java Questions

onClick dell'elemento visualizzato
Domande Java

Perché il valore varStatus contiene valore fino all'iterazione del ciclo. Dopo di che il valore non è più valido. quindi solo tu hai l'eccezione. A tale scopo è necessario l'indice
newuser

Ho bisogno di sapere l'indice [posizione] di ogni elemento viene fornito in String Array.
Domande su Java il

funziona :) se lo faccio in questo modo onclick = "getCategoryIndex ($ {loop.index})" ... grazie per l'aiuto
Domande Java

19

Affronto un problema simile ora capisco che abbiamo qualche opzione in più: varStatus = "loop", qui sarà la variabile loop che conterrà l'indice di lop.

Può essere utilizzato per leggere l'indice di base Zeor o 1 un indice di base.

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

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

Per esempio :

<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>

Per maggiori informazioni fare riferimento a questo link


11

Puoi usare l' varStatusattributo in questo modo: -

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

myIndex.index ti darà l'indice. Ecco myIndexun oggetto LoopTagStatus .

Quindi, puoi inviarlo al tuo metodo javascript in questo modo: -

<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

Ricevo questo Uncaught ReferenceError: myIndex is not defined e +1 per il tuo impegno
Domande su Java il

0
<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

sopra la riga mi dava un errore. Quindi ho scritto di seguito che funziona bene per me.

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

Forse qualcun altro potrebbe ricevere lo stesso errore. Guarda questo ragazzi!


0

Questo funziona per me:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.