如果我有一个JSF支持bean返回一个ArrayList类型的对象,我应该能够使用<c:foreach>来迭代列表中的元素,每个元素包含一个Map,尽管如何通过JSTL访问Map内容的问题已经在here中得到了回答,但是如果我传递一个这样的Map数组,我不知道如何在迭代它们的同时仍然使用JSTL访问Map内容。有些文档提到了简单的迭代器,但没有提到那些项目本身就是Map的迭代器。如果有人能给予我一个简单的例子,说明java列表是如何在JSP中迭代的,我将不胜感激。
<c:foreach>
5hcedyr01#
假设${list}指向一个List<Object>,则
${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是具有name和email属性的Javabean,这些属性由getName()和getEmail() getter方法表示,则
List<Person>
Person
name
email
getName()
getEmail()
<c:forEach items="${list}" var="person"> ${person.name}<br> ${person.email}<br> </c:forEach>
for (Person person : list) { System.out.println(person.getName()); System.out.println(person.getEmail()); }
如果您使用的是List<Map<K, V>>,则
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>
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 (Expression Language)中,您可以使用.点操作符通过“属性名称”访问getter方法(getter方法名不带get前缀),所有这些都符合Javabean规范。
key
value
Map.Entry
.
get
t0ybt7op2#
试试这个
<c:forEach items="${list}" var="map"> <tr> <c:forEach items="${map}" var="entry"> <td>${entry.value}</td> </c:forEach> </tr> </c:forEach>
2条答案
按热度按时间5hcedyr01#
假设
${list}
指向一个List<Object>
,则在“普通Java”中的作用基本上与以下相同:
如果您的
${list}
是List<Person>
,其中Person
是具有name
和email
属性的Javabean,这些属性由getName()
和getEmail()
getter方法表示,则在“普通Java”中的作用基本上与以下相同:
如果您使用的是
List<Map<K, V>>
,则在“普通Java”中的作用基本上与以下相同:
这里的
key
和value
不是什么特殊的方法,它们实际上是Map.Entry
对象的getter方法(单击蓝色的Map.Entry
链接查看API文档)在EL (Expression Language)中,您可以使用.
点操作符通过“属性名称”访问getter方法(getter方法名不带get
前缀),所有这些都符合Javabean规范。另请参见:
t0ybt7op2#
试试这个