我有这样的地图,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
现在我必须迭代这个Map,然后迭代地图中的ArrayList。我怎么能用JSTL做到这一点?
答案 0 :(得分:72)
您可以使用JSTL <c:forEach>
标记来迭代数组,集合和地图。
对于数组和集合,var
每次迭代都会立即为您提供当前迭代的项目。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${collectionOrArray}" var="item">
Item = ${item}<br>
</c:forEach>
如果是地图,var
每次迭代都会为您提供一个Map.Entry
对象,而该对象又有getKey()
和getValue()
种方法。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${map}" var="entry">
Key = ${entry.key}, value = ${entry.value}<br>
</c:forEach>
在您的特定情况下,${entry.value}
实际上是List
,因此您还需要迭代它:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${map}" var="entry">
Key = ${entry.key}, values =
<c:forEach items="${entry.value}" var="item" varStatus="loop">
${item} ${!loop.last ? ', ' : ''}
</c:forEach><br>
</c:forEach>
varStatus
只是为了方便;)
为了更好地理解这里发生了什么,这里是一个简单的Java翻译:
for (Entry<String, List<Object>> entry : map.entrySet()) {
out.print("Key = " + entry.getKey() + ", values = ");
for (Iterator<Object> iter = entry.getValue().iterator(); iter.hasNext();) {
Object item = iter.next();
out.print(item + (iter.hasNext() ? ", " : ""));
}
out.println();
}
答案 1 :(得分:6)
你尝试过这样的事吗?
<c:forEach var='item' items='${map}'>
<c:forEach var='arrayItem' items='${item.value}' />
...
</c:forEach>
</c:forEach>
答案 2 :(得分:5)
你没有关闭c tag.try out this
<c:forEach items="${logMap}" var="entry">
Key = ${entry.key}, values =
<c:forEach items="${entry.value}" var="item" varStatus="loop">
${item} ${!loop.last ? ', ' : ''}
</c:forEach><br>
</c:forEach>
答案 3 :(得分:0)
如果您知道密钥
,您也可以循环遍历map.value<c:forEach var="value" items="${myMap[myObject.someInteger]}">
${value}
</c:forEach>