Как получить значение индекса из цикла 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()".

Ответы:


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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.