JSP 使用JSTL标记迭代List和Map的元素< c:forEach>

eimct9ow  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(254)

如果我有一个JSF支持bean返回一个ArrayList类型的对象,我应该能够使用<c:foreach>来迭代列表中的元素,每个元素包含一个Map,尽管如何通过JSTL访问Map内容的问题已经在here中得到了回答,但是如果我传递一个这样的Map数组,我不知道如何在迭代它们的同时仍然使用JSTL访问Map内容。有些文档提到了简单的迭代器,但没有提到那些项目本身就是Map的迭代器。
如果有人能给予我一个简单的例子,说明java列表是如何在JSP中迭代的,我将不胜感激。

5hcedyr0

5hcedyr01#

假设${list}指向一个List<Object>,则

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

在“普通Java”中的作用基本上与以下相同:

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

如果您的${list}List<Person>,其中Person是具有nameemail属性的Javabean,这些属性由getName()getEmail() getter方法表示,则

<c:forEach items="${list}" var="person">
    ${person.name}<br>
    ${person.email}<br>
</c:forEach>

在“普通Java”中的作用基本上与以下相同:

for (Person person : list) {
    System.out.println(person.getName());
    System.out.println(person.getEmail());
}

如果您使用的是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不是什么特殊的方法,它们实际上Map.Entry对象的getter方法(单击蓝色的Map.Entry链接查看API文档)在EL (Expression Language)中,您可以使用.点操作符通过“属性名称”访问getter方法(getter方法名不带get前缀),所有这些都符合Javabean规范。

另请参见:

t0ybt7op

t0ybt7op2#

试试这个

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

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

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

相关问题