Comment obtenir une valeur d'index à partir de la boucle foreach dans jstl


107

J'ai une valeur définie dans l' requestobjet comme suit,

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

et voici comment j'itère dans la page jsp

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

Comment obtenir l'index de chaque élément et le transmettre à la fonction JavaScript onclick="getCategoryIndex()".

Réponses:


235

utiliser varStatus pour obtenir l'index c: forEach varStatus propriétés

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

Je reçois cette Uncaught ReferenceError: boucle n'est pas définie `et +1 pour votre effort
Questions Java

onCliquez sur l'élément affiché
Questions Java

Parce que la valeur varStatus contient une valeur jusqu'à l'itération de la boucle. Après cela, la valeur n'est pas valide. donc seulement vous avez l'exception. Dans quel but vous avez besoin de l'index
newuser

J'ai besoin de connaître l'index [emplacement] de chaque élément dans le tableau de chaînes.
Questions Java

ça marche :) si je fais de cette façon onclick = "getCategoryIndex ($ {loop.index})" ... merci pour l'aide
Questions Java

19

Je suis confronté à un problème similaire maintenant, je comprends que nous avons encore plus d'options: varStatus = "loop", Voici la variable loop will qui contiendra l'index de lop.

Il peut être utilisé pour lire l'index de base Zeor ou 1 un index de base.

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

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

Par exemple :

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

Pour plus d'informations, veuillez consulter ce lien


11

Vous pouvez utiliser l' varStatusattribut comme ceci: -

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

myIndex.index vous donnera l'index. Voici myIndexun objet LoopTagStatus .

Par conséquent, vous pouvez envoyer cela à votre méthode javascript comme ceci: -

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

Je reçois ceci Uncaught ReferenceError: myIndex is not defined et +1 pour votre effort
Questions Java

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

au-dessus de la ligne me donnait une erreur. J'ai donc écrit ci-dessous ce qui fonctionne très bien pour moi.

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

Peut-être que quelqu'un d'autre pourrait avoir la même erreur. Regardez ces gars!


0

Cela fonctionne pour moi:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.