web-dev-qa-db-fra.com

Parcourez les éléments de liste et de carte à l'aide de la balise JSTL <c: forEach>

Si un bean de support JSF renvoie un objet de type ArrayList, je devrais pouvoir utiliser <c:foreach> pour parcourir les éléments de la liste. Chaque élément contient une carte et bien que la question de savoir comment accéder au contenu de la carte via JSTL ait été résolue ici , si je transmets un tableau de telles cartes, je ne trouve pas comment itérer sur ces cartes tout en continuant d'accéder contenu de la carte en utilisant JSTL. Il existe une documentation qui fait référence à de simples itérateurs mais pas à ceux dont les éléments sont eux-mêmes des cartes.

Si quelqu'un peut me donner un exemple simple de la manière dont une liste Java est itérée dans JSP, je serais très reconnaissant . Mark

44
volvox

Mark, cela a déjà été répondu dans votre sujet précédent . Mais bon, la voici à nouveau:

Supposons que ${list} pointe sur un List<Object>, puis le suivant

<c:forEach items="${list}" var="item">
    ${item}<br>
</c:forEach>

fait fondamentalement la même chose que de suivre en "Java normal":

for (Object item : list) {
    System.out.println(item);
}

Si vous avez plutôt un List<Map<K, V>>, alors ce qui suit

<c:forEach items="${list}" var="map">
    <c:forEach items="${map}" var="entry">
        ${entry.key}<br>
        ${entry.value}<br>
    </c:forEach>
</c:forEach>

fait fondamentalement la même chose que de suivre en "Java normal":

for (Map<K, V> map : list) {
    for (Entry<K, V> entry : map.entrySet()) {
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
    }
}

Les key et value ne sont pas des méthodes spéciales. Ce sont réellement méthodes getter de Map.Entry object (cliquez sur le lien bleu Map.Entry pour voir la documentation de l'API). En EL (Expression Language), vous pouvez utiliser l'opérateur point . pour accéder aux méthodes getter à l'aide de "nom de propriété" (le nom de la méthode getter sans le préfixe get), le tout conformément aux spécifications Javabean.

Cela dit, vous devez vraiment nettoyer les "réponses" de votre sujet précédent car elles ajoutent du bruit à la question. Lisez aussi les commentaires que j'ai postés dans vos "réponses".

107
BalusC

essaye ça

<c:forEach items="${list}" var="map">
    <tr>
        <c:forEach items="${map}" var="entry">

            <td>${entry.value}</td>

        </c:forEach>
    </tr>
</c:forEach>
0
Prateek RG