如何使用JSTL在HashMap中迭代ArrayList?

我有这样的地图,

Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>(); 

现在我必须迭代这个Map,然后迭代地图中的ArrayList。 我怎样才能使用JSTL?

您可以使用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(); } 

也可以看看:

  • 如何循环在JSP中的HashMap?
  • 在JSP页面中使用MVC和DAO模式在HTML中显示JDBC ResultSet
  • 如何在JSTL中循环指定的次数?

你尝试过这样的事情吗?

 <c:forEach var='item' items='${map}'> <c:forEach var='arrayItem' items='${item.value}' /> ... </c:forEach> </c:forEach> 

你还没有closuresc tag.try这个

  <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> 

如果你知道密钥,你也可以绕过map.value自己

 <c:forEach var="value" items="${myMap[myObject.someInteger]}"> ${value} </c:forEach>