Como obter um valor de índice do loop foreach em jstl

107

Eu tenho um valor definido no requestobjeto como o seguinte,

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

e é assim que eu itero na página jsp

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

Como faço para obter o índice de cada elemento e passá-lo para a função JavaScript onclick="getCategoryIndex()".

Java Questions
fonte

Respostas:

235

use varStatus para obter as propriedades c: forEach varStatus do índice

<c:forEach var="categoryName" items="${categoriesList}" varStatus="loop">
    <li><a onclick="getCategoryIndex(${loop.index})" href="#">${categoryName}</a></li>
</c:forEach>
novo usuário
fonte
Eu entendi que este Uncaught ReferenceError: loop não está definido `e +1 pelo seu esforço
Java Questões de
onClick do elemento exibido
Java Questions
Porque o valor varStatus contém valor até a iteração do loop. Depois disso, o valor não é mais válido. então só você tem a exceção. Para esse propósito, você precisa do índice
usuário
Eu preciso saber o índice [localização] de cada elemento que vem na String Array.
Perguntas Java de
funciona :) se eu fizer assim onclick = "getCategoryIndex ($ {loop.index})" ... obrigado pela ajuda
Java Questions
19

Eu enfrento um problema semelhante agora eu entendo que temos mais algumas opções: varStatus = "loop", aqui será a variável loop que conterá o índice de lop.

Ele pode ser usado para ler o índice de base Zeor ou 1 índice de base um.

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

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

Por exemplo :

<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 mais informações, consulte este link

Laxman G
fonte
11

Você pode usar o varStatusatributo assim: -

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

myIndex.index fornecerá o índice. Aqui myIndexestá um objeto LoopTagStatus .

Portanto, você pode enviar isso para o seu método javascript desta forma: -

<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>
SudoRahul
fonte
Recebo isto Uncaught ReferenceError: myIndex is not defined e +1 pelo seu esforço
Java Questions
0
<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

a linha acima estava me dando um erro. Então, escrevi abaixo o que está funcionando bem para mim.

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

Talvez outra pessoa receba o mesmo erro. Olhe para esses caras!

Rakesh Kumar
fonte
0

Isso funciona para mim:

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