Як отримати значення індексу з циклу foreach в jstl


106

У мене в requestоб'єкті встановлено таке значення, як наступне,

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

і це я повторюю на сторінці jsp

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

Як отримати індекс кожного елемента та передати його у функцію JavaScript onclick="getCategoryIndex()".

Відповіді:


234

використовуйте varStatus, щоб отримати індекс c: forEach властивості varStatus

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

Я розумію, що ця Uncaught ReferenceError: петля не визначена `та +1 для ваших зусиль
Java Питання

onClick елемента, що відображається
Питання Java

Оскільки значення varStatus містить значення до ітерації циклу. Після цього значення не є дійсним. тому тільки ви отримали виняток. Для цього вам потрібен індекс
newuser

Мені потрібно знати, що індекс [розташування] кожного елемента входить у String Array.
Запитання Java

це працює :) якщо я роблю так onclick = "getCategoryIndex ($ {loop.index})" ... дякую за допомогу
Питання Java

19

Я зіткнувся з подібною проблемою зараз я розумію, у нас є ще один варіант: varStatus = "loop", Тут буде цикл змінної, який буде містити індекс lop.

Він може використовуватись для використання для читання базового індексу Zeor або 1 одного базового індексу.

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

${loop.index} it will give 0 base index as normal Index of array починати з 0.

Наприклад :

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

Для отримання додаткової інформації перейдіть за цим посиланням


11

Ви можете використовувати такий varStatusатрибут:

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

myIndex.index дасть вам індекс. Ось myIndexоб’єкт LoopTagStatus .

Отже, ви можете надіслати це своєму методу javascript таким чином: -

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

Я отримую це Uncaught ReferenceError: myIndex is not defined і +1 за ваші зусилля
Питання Java

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

вище рядок давав мені помилку. Тому я записав нижче спосіб, який добре працює для мене.

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

Можливо, хтось інший може отримати таку ж помилку. Подивіться на це хлопці!


0

Це працює для мене:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.