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

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

Ответ 1

используйте varStatus, чтобы получить индекс c: forEach свойства varStatus

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

Ответ 2

Я сталкиваюсь с подобной проблемой, теперь я понимаю, что у нас есть еще один вариант: 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>

Для получения дополнительной информации см. ссылку

Ответ 3

Вы можете использовать атрибут varStatus следующим образом: -

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

myIndex.index предоставит вам индекс. Здесь myIndex является объектом LoopTagStatus.

Следовательно, вы можете отправить это на свой javascript-метод следующим образом: -

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

Ответ 4

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

выше линия давала мне ошибку. Таким образом, я записал ниже, который работает хорошо для меня.

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

Может быть, кто-то еще может получить такую же ошибку. Посмотрите на это, ребята!