jsp if - Itérer sur les éléments de List et Map à l'aide de la balise JSTL<c:forEach>




index fmt (3)

Si j'ai un bean backing JSF retourner un objet de type ArrayList, je devrais pouvoir utiliser <c:foreach> pour itérer sur les éléments de la liste. Chaque élément contient une carte et bien que la question de l'accès au contenu de la carte via JSTL ait été résolue here , si je passe un tableau de ces cartes, je ne peux pas trouver comment les parcourir et accéder au contenu de la carte en utilisant JSTL . Il y a de la documentation qui se réfère à des itérateurs simples mais pas à ceux dont les éléments sont eux-mêmes des cartes.

Si quelqu'un peut me donner un exemple simple de la façon dont une liste Java est itérée dans JSP, je serais massivement reconnaissant. marque


Answers

essaye ça

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

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

        </c:forEach>
    </tr>
</c:forEach>

Mark, ceci est déjà répondu dans votre sujet précédent . Mais OK, ici c'est encore:

Supposons que ${list} pointe sur une List<Object> , puis ce qui suit

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

fait essentiellement la même chose que de suivre dans "Java normal":

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

Si vous avez une List<Map<K, V>> place, alors

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

fait essentiellement la même chose que de suivre dans "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());
    }
}

La key et la value sont ici pas des méthodes spéciales. Ce sont en fait des méthodes getter de l'objet Map.Entry (cliquez sur le lien bleu Map.Entry pour voir le doc API). En EL (langage d'expression), vous pouvez utiliser le . opérateur point pour accéder aux méthodes getter en utilisant "nom de la propriété" (le nom de la méthode getter sans le préfixe get ), tout juste en fonction de la spécification Javabean.

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


Je ne vois pas vraiment quelle est la difficulté à laquelle vous faites face ...

Pourquoi ne pas simplement filtrer / supprimer des données de vos listes en utilisant une simple boucle for? (Notez qu'une boucle foreach ne fonctionnera PAS si vous effectuez une itération lors de l'édition / de la modification de l'objet itéré)

for (int i = ArticleList.Count -1; i >= 0; i--)
{
    for (int j = 0; j < listWriters.Count; j++)
    {
        if (ArticleList[i].WriterId == listWriters[j].WriterID )
            ArticleList.RemoveAt(i);
    }            
}

L'astuce de l'itération en arrière résout le paradigme "supprimer des éléments en itérant".





list jsp foreach hashmap jstl