I have a map like this,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
Now I have to iterate this Map and then the ArrayList inside the map. How can I do this using JSTL?
I have a map like this,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
Now I have to iterate this Map and then the ArrayList inside the map. How can I do this using JSTL?
You can use JSTL <c:forEach>
tag to iterate over arrays, collections and maps.
In case of arrays and collections, every iteration the var
will give you just the currently iterated item right away.
<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>
<c:forEach items=\"${collectionOrArray}\" var=\"item\">
Item = ${item}<br>
</c:forEach>
In case of maps, every iteration the var
will give you a Map.Entry
object which in turn has getKey()
and getValue()
methods.
<%@ 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>
In your particular case, the ${entry.value}
is actually a List
, thus you need to iterate over it as well:
<%@ 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>
The varStatus
is there just for convenience ;)
To understand better what\'s all going on here, here\'s a plain Java translation:
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();
}
Did you try something like this?
<c:forEach var=\'item\' items=\'${map}\'>
<c:forEach var=\'arrayItem\' items=\'${item.value}\' />
...
</c:forEach>
</c:forEach>
you haven\'t closed 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>
You can also loop round just the map.value its self if you know the key
<c:forEach var=\"value\" items=\"${myMap[myObject.someInteger]}\">
${value}
</c:forEach>