Comment itérer un ArrayList à l'intérieur d'une HashMap en utilisant JSTL?
j'ai une carte comme celle-ci,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
maintenant je dois itérer cette carte et puis L'ArrayList à l'intérieur de la carte. Comment puis-je faire cela en utilisant JSTL?
4 réponses
Vous pouvez utiliser JSTL <c:forEach>
tag pour itérer sur tous les tableaux, les collections et les cartes.
dans le cas de tableaux et de collections, chaque itération du var
vous donnera juste l'item itéré en cours 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 de cartes, chaque itération le var
vous donnera un Map.Entry
objet qui à son tour a 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 un List
, donc vous devez itérer sur elle aussi bien:
<%@ 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 varStatus
est là juste pour des raisons de 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();
}
voir aussi:
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é l'étiquette C.essayez ce
<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 boucle autour de la carte.valeur son soi si vous connaissez la clé
<c:forEach var="value" items="${myMap[myObject.someInteger]}">
${value}
</c:forEach>