Mon managed bean:ForEach et Facelets
public List<String> getLiQuickNav(){
System.out.println("I'm here...");
List<String> l = new ArrayList<String>();
l.add("toto");
l.add("tata");
l.add("titi");
return l;
}
Mon forEach:
<c:forEach var="categorie" items="#{mainControleur.liQuickNav}">
<h:outputLabel value="${categorie}"/>
</c:forEach>
Mon flux de sortie:
Je suis ici ...
Je suis ici ...
Je suis ici ...
Je suis ici ...
Comme vous pouvez le voir "getLiQuickNav()" est appelé 4times par mon ForEach. Mais je veux juste appeler "getLiQuickNav()" une fois ... Comment l'appeler juste une fois?
Question de bonus: Pourquoi "getLiQuickNav()" est appelé 4time alors que je n'ai que 3item "tata, titi, toto"?
Je ne pense pas que quelque chose comme ci-dessus est une bonne pratique en général. Il n'y a aucune raison d'initialiser paresseusement quelque chose avec 3 éléments. Construisez la liste dans le constructeur ou un bloc statique. – GreenieMeanie
@GreenieMeanie - Ceci est évidemment un exemple trivial, il y a de fortes chances que les données de la liste ne soient pas disponibles sur la construction de l'objet ou l'initialisation du bloc statique (si elle provient d'une source externe telle qu'une base de données). La réponse était destinée à illustrer que la construction de la liste ne devrait pas être faite à chaque appel de getLiQuickNav(). – mtpettyp