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

Questions Java
la source

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>
nouvel utilisateur
la source
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

Laxman G
la source
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>
SudoRahul
la source
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!

Rakesh Kumar
la source
0

Cela fonctionne pour moi:

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