使用 JSTL <c:forEach> 标签遍历 List 和 Map 的元素
Posted
技术标签:
【中文标题】使用 JSTL <c:forEach> 标签遍历 List 和 Map 的元素【英文标题】:Iterate over elements of List and Map using JSTL <c:forEach> tag 【发布时间】:2011-01-10 01:22:44 【问题描述】:如果我有一个 JSF 支持 bean 返回一个 ArrayList 类型的对象,我应该能够使用 <c:foreach>
来迭代列表中的元素。每个元素都包含一个地图,虽然关于如何通过 JSTL 访问地图内容的问题已得到解答 here,但如果我传递此类地图的数组,我无法找到如何迭代它们并仍然访问地图内容使用 JSTL。有一些文档提到了简单的迭代器,但没有提到那些项目本身就是映射的迭代器。
如果有人能给我一个简单的例子,说明如何在 JSP 中迭代 java 列表,我将不胜感激。 标记
【问题讨论】:
【参考方案1】:马克,您的previous topic 已经回答了这个问题。但是好的,又来了:
假设$list
指向List<Object>
,则如下
<c:forEach items="$list" var="item">
$item<br>
</c:forEach>
与“普通Java”中的以下内容基本相同:
for (Object item : list)
System.out.println(item);
如果您改为使用List<Map<K, V>>
,则如下
<c:forEach items="$list" var="map">
<c:forEach items="$map" var="entry">
$entry.key<br>
$entry.value<br>
</c:forEach>
</c:forEach>
与“普通Java”中的以下内容基本相同:
for (Map<K, V> map : list)
for (Entry<K, V> entry : map.entrySet())
System.out.println(entry.getKey());
System.out.println(entry.getValue());
key
和 value
在这里不是特殊的方法。它们实际上是Map.Entry
对象的getter 方法(点击蓝色的Map.Entry
链接查看API 文档)。在 EL(表达式语言)中,您可以使用 .
点运算符通过“属性名称”(不带 get
前缀的 getter 方法名称)访问 getter 方法,所有这些都符合 Javabean 规范。
也就是说,您确实需要清理上一个主题中的“答案”,因为它们会增加问题的噪音。还请阅读我在您的“答案”中发布的 cmets。
【讨论】:
我很想清理它们,但没有删除按钮,并且编辑页面的完整参考链接上的 grep 'delete' 没有返回任何内容。请让我知道如何删除流浪汉。 可能是因为您的信誉低,您无法删除。你现在能做的最好的事情是投票给真正的答案(按答案左侧的顶部三角形)并保持原样,以便真正的答案排列得更高在列表中。要了解有关 *** 的更多信息,请阅读顶部栏中的“关于”和“常见问题解答”链接 :) 这是因为我的声望低。但我认为我无法删除自己的答案这一事实有点蹩脚。 您还需要注册您的帐户!另请参阅meta.stackexchange.com/questions/37183/…。此外,根据常见问题解答,您接受问题的答案可获得 2 分(通过按下您要接受的答案左侧的白色大复选标记 - 使其变为绿色),您将获得 10您根据自己的问题和答案获得的每一次赞成票都会获得积分。 澄清一下:您不需要 任何 声誉来删除自己的答案。您只需需要注册。【参考方案2】:试试这个
<c:forEach items="$list" var="map">
<tr>
<c:forEach items="$map" var="entry">
<td>$entry.value</td>
</c:forEach>
</tr>
</c:forEach>
【讨论】:
以上是关于使用 JSTL <c:forEach> 标签遍历 List 和 Map 的元素的主要内容,如果未能解决你的问题,请参考以下文章
jquery使用模板动态添加html元素,相当于jstl里的foreach