使用 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 类型的对象,我应该能够使用 &lt;c:foreach&gt; 来迭代列表中的元素。每个元素都包含一个地图,虽然关于如何通过 JSTL 访问地图内容的问题已得到解答 here,但如果我传递此类地图的数组,我无法找到如何迭代它们并仍然访问地图内容使用 JSTL。有一些文档提到了简单的迭代器,但没有提到那些项目本身就是映射的迭代器。

如果有人能给我一个简单的例子,说明如何在 JSP 中迭代 java 列表,我将不胜感激。 标记

【问题讨论】:

【参考方案1】:

马克,您的previous topic 已经回答了这个问题。但是好的,又来了:

假设$list指向List&lt;Object&gt;,则如下

<c:forEach items="$list" var="item">
    $item<br>
</c:forEach>

与“普通Java”中的以下内容基本相同:

for (Object item : list) 
    System.out.println(item);

如果您改为使用List&lt;Map&lt;K, V&gt;&gt;,则如下

<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());
    

keyvalue 在这里不是特殊的方法。它们实际上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 的元素的主要内容,如果未能解决你的问题,请参考以下文章

jstl c:forEach

JSTL 中c:forEach 嵌套c:if

jquery使用模板动态添加html元素,相当于jstl里的foreach

JSTL--JSTL表达式:c:forEach,varstatus/begin end/循环控制标签--drp215

JSTL-3

JSP 中 JSTL<c:forEach 标签的用法