使用JSTL <c:foreach> tag </c:foreach>迭代List和Map的元素

时间:2010-01-27 16:42:55

标签: list jsp foreach hashmap jstl

如果我有一个JSF支持bean返回一个ArrayList类型的对象,我应该能够使用<c:foreach>迭代列表中的元素。每个元素都包含一个地图,虽然如何通过JSTL访问地图内容的问题已经回答here,如果我传递了一系列这样的地图,我找不到如何迭代它们并仍然访问使用JSTL映射内容。有文档引用了简单的迭代器,但没有引用那些项本身就是映射的文档。

如果有人能给我一个简单的例子来说明如何在JSP中迭代java List我会非常感激。 标记

2 个答案:

答案 0 :(得分:109)

马克,这已在您的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());
    }
}

keyvalue这里不是特殊方法。它们是{strong>实际 getter方法Map.Entry对象(点击蓝色Map.Entry链接查看API文档)。在EL(表达式语言)中,您可以使用.点运算符来访问使用“属性名称”(不带get前缀的getter方法名称)的getter方法,所有这些都只是根据Javabean规范。

那就是说,你真的需要清理上一个主题中的“答案”,因为它们会给问题增加噪音。另请阅读我在“答案”中发布的评论。

答案 1 :(得分:0)

试试这个

<c:forEach items="${list}" var="map">
    <tr>
        <c:forEach items="${map}" var="entry">

            <td>${entry.value}</td>

        </c:forEach>
    </tr>
</c:forEach>