Bonjour à tous,

je rencontre des difficultés à réaliser une boucle for de ce type :

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
	}
}
Actuellement j'ai ce code :

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>
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...

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>
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;
}
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.

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