J'ai une carte comme celle-ci,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
Maintenant, je dois itérer cette carte puis la liste de tableaux à l'intérieur de la carte. Comment puis-je faire cela en utilisant JSTL?
Vous pouvez utiliser JSTL<c:forEach>
tag pour parcourir les tableaux, les collections et les cartes.
Dans le cas de tableaux et de collections, chaque itération de la var
vous donnera immédiatement l'élément itéré.
<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core" %>
<c:forEach items="${collectionOrArray}" var="item">
Item = ${item}<br>
</c:forEach>
Dans le cas de cartes, chaque itération de la var
vous donnera un objet Map.Entry
qui possède à son tour les méthodes getKey()
et 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>
Dans votre cas particulier, le ${entry.value}
est en fait une List
; vous devez donc l'itérer également:
<%@ 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>
La varStatus
n’est là que par commodité;)
Pour mieux comprendre ce qui se passe ici, voici une traduction Java simple:
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();
}
Avez-vous essayé quelque chose comme ça?
<c:forEach var='item' items='${map}'>
<c:forEach var='arrayItem' items='${item.value}' />
...
</c:forEach>
</c:forEach>
vous n'avez pas fermé 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>
Vous pouvez également faire une boucle autour de la carte.
<c:forEach var="value" items="${myMap[myObject.someInteger]}">
${value}
</c:forEach>