Bonjour à tous,
je rencontre des difficultés à réaliser une boucle for de ce type :
Actuellement j'ai ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int max = (liste.size() / 16) + 1; for (int k=0;k<=max;k++) { for(int j=k*16; j<(k+1)*16;j++) { // mon traitement } }
La fonction getListeInstance me retourne une List<Instance> . Je réalise un affichage de toutes mes instances sur une ligne. Hors j'ai de plus en plus d'instances et je voudrais que toutes les 16 instances je retourne à la ligne pour afficher les 16 suivantes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <ui:repeat var="env" value="#{pagePaysageBean.getListeEnv()}"> <ui:param name="idEnv" value="#{env.idEnv}"/> <ui:repeat var="i" value="#{pagePaysageBean.getListeInstance(idEnv)}"> // traitement </ui:repeat> </ui:repeat>
J'ai tenté avec ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // ma page xhtml <ui:repeat var="env" value="#{pagePaysageBean.getListeEnv()}"> <ui:param name="idEnv" value="#{env.idEnv}"/> <c:forEach var="k" begin="0" end="#{pagePaysageBean.getMax(idEnv)}"> <c:forEach items="#{pagePaysageBean.getListeInstance()}" var="i" begin="#{pagePaysageBean.begin(k)}" end="#pagePaysageBean.end(k)}"> // traitement </c:forEach> </c:forEach> </ui:repeat>Finalement comme j'avais besoin de connaitre la taille de ma liste avant d'en avoir besoin j'ai déporté son instanciation dans le getMax. J'ai ajouté les fonctions begin et end comme je ne savais pas comment faire dans mon jsf.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 // mon bean public int getMax(int idenv) { _instances = new ArrayList<Instance>(); // met a jour _instance par rapport à l'idenv //... int nb = _instances.size(); nb = (nb / 16) + 1; return nb; } public List<Instance> getListeInstance() { return _instances; } public int begin(int k) { return k*16; } public int end(int k) { return (k+1)*16; }
Résultat mon code ne fonctionne plus : ma liste qui avec le 1er code s'affichait (sur une ligne dont je ne pouvais pas voir la fin comme sa dépassait de ma page), ne s'affiche plus du tout. Le code que j'ai ajouté à l'air de faire "planter" le ui:repeat que je n'ai pas touché. Normalement celui-ci me retourne une liste de 6 environnements, donc je devrais passer dans mon 1er for:each 6 fois. Or je n'y passe plus qu'une seule fois.
Pouvez vous me dire si j'ai bien traduit mon code java (mon iteration) en code jsf ou non ? Pour moi le probleme doit venir de là... Merci à vous
Partager