Vous pouvez utiliser JSTL <c:forEach>
pour itérer sur des tableaux, des collections et des cartes.
Dans le cas des tableaux et des collections, à chaque itération, la fonction var
vous donnera juste l'élément actuellement itéré immédiatement.
<%@ 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 des cartes, à chaque itération, le var
vous donnera un Map.Entry
qui, à son tour, a getKey()
y getValue()
méthodes.
<%@ 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 un List
Il faut donc aussi itérer sur elle :
<%@ 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>
Le site varStatus
est là juste pour la commodité ;)
Pour mieux comprendre ce qui se passe ici, voici une traduction Java en clair :
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();
}
Voir aussi :