如何从jstl中的foreach循环中获取索引值

Posted

技术标签:

【中文标题】如何从jstl中的foreach循环中获取索引值【英文标题】:How to get a index value from foreach loop in jstl 【发布时间】:2013-09-20 11:32:33 【问题描述】:

我在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 properties

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

【讨论】:

我知道这个Uncaught ReferenceError: loop 没有定义`并且为你的努力+1 onClick 显示的元素 因为 varStatus 值包含循环迭代之前的值。之后,该值无效。所以只有你有例外。您需要索引的目的是什么 我需要知道字符串数组中每个元素的索引[位置]。 它有效 :) 如果我这样做 onclick="getCategoryIndex($loop.index)" ...感谢您的帮助【参考方案2】:

您可以像这样使用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【参考方案3】:

我也遇到过类似的问题。经过研究,我了解到varStatus="loop" 有更多选择。它可以使用从零开始的索引或从一开始的索引:

$loop.index 使用 0 基索引 $loop.count 使用 1 基索引

例如:

<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]" ></img>
</picture>
</c:forEach>

更多信息请查看link。

【讨论】:

【参考方案4】:
<a onclick="getCategoryIndex($myIndex.index)" href="#">$categoryName</a>

上面的行给了我一个错误。所以我用下面的方式写下来,这对我来说很好。

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

也许其他人可能会遇到同样的错误。看看这家伙!

【讨论】:

【参考方案5】:

这对我有用:

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

【讨论】:

以上是关于如何从jstl中的foreach循环中获取索引值的主要内容,如果未能解决你的问题,请参考以下文章

如何从foreach循环中的匹配值获取下一个值

从foreach循环中获取当前索引[重复]

JSTL标签之c:foreach,c:if标签小结

如何使用 JSTL forEach 循环检索 HashMap [重复]

如何从 foreach 循环中将双精度值附加到 2D 数组,并访问前一个索引?

如何在刀片foreach循环中获取迭代次数