Как получить значение индекса из цикла foreach в jstl

107

У меня есть значение, установленное в 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()".

Вопросы по Java
источник

Ответы:

235

используйте 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
Мне нужно знать индекс [местоположение] каждого элемента в массиве строк.
Вопросы по Java
это работает :) если я сделаю так onclick = "getCategoryIndex ($ {loop.index})" ... спасибо за помощь
Вопросы по Java
19

Я столкнулся с аналогичной проблемой, теперь я понимаю, что у нас есть еще один вариант: varStatus = "loop". Здесь будет переменная цикла, которая будет содержать индекс lop.

Его можно использовать для чтения базового индекса Zeor или одного базового индекса.

${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>
Pradeep
источник