Bonjour,

Je génère grâce à une méthode un <rich:panelBar> contenant autant de <rich:panelBarItem> que l'utilisateur en demande.

La génération se passe bien et tout s'affiche correctement.

Chaque panelBarItem contient un inputText et un inputTextArea. Leur valeurs est affectée par une EL qui correspond à l'attribut d'une variable contenu dans une list.

Quand l'utilisateur a fini d'encoder les informations, il clic sur enregistrer.
Ce bouton lance la méthode enregistrer qui envoie ma liste à un autre bean (DossierBean) qui stocke ma liste. Pour être sur qu'il stocke bien les valeurs entrées par l'utilisateur, je fais une petite boucle qui parcours la liste et qui m'affiche dans la console les valeurs de mon acteur.

Lors du passage dans la boucle, les donnée du premier panelBarItem sont bien enregistrée dans la liste mais les données des autres panelBarItem sont toujours == null. et lorsque je recharge ma page, les données du premier panelBarItem sont bien ré affichée ma pas celle des autres.


accueil.jsp :
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
 
<center><h:form>
	<h:panelGrid columns="3">
		<h:outputText value="Nombre d'acteur :" />
		<h:inputText value="#{acteur.nb}" />
		<h:commandButton action="#{acteur.createActeur}" value="Générer les acteurs">
			<a4j:support event="onclick" reRender="barActeurs" />
		</h:commandButton>
	</h:panelGrid>
	<rich:panelBar id="barActeurs" binding="#{acteur.bar}">
	</rich:panelBar>
	<h:panelGrid columns="1">
		<h:commandButton action="#{acteur.enregistrer}" value="Enregistrer les acteurs" />
	</h:panelGrid>
</h:form></center>
ActeurBean.java :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
public class ActeurBean {
 
	private List<Acteur> acteurs = new ArrayList<Acteur>();
	private DossierBean dossier = new DossierBean();
	private int nb;
	private String header = "Acteur n° ";
	private HtmlPanelBar bar;
 
	public ActeurBean() {
	}
 
	public String createActeur() {
		acteurs.removeAll(getActeurs());
		bar = new HtmlPanelBar();
		bar.setRendered(true);
		populateDynamicBar();
		return "generer";
	}
 
	public String enregistrer() {
		System.out.println("ENREGISTRER : DEBUT");
		dossier.addActeur(acteurs);
		System.out.println("ENREGISTRER : FIN");
		return "enregistrer";
	}
 
	public void populateDynamicBar() {
		bar.setWidth("850");
		for (int i = 0; i < nb; i++) {
			Acteur acteur = new Acteur();
			acteurs.add(acteur);
 
			HtmlPanelBarItem barItem = new HtmlPanelBarItem();
			barItem.setLabel(header + (i + 1));
 
			HtmlForm form = new HtmlForm();
			form.setStyleClass("alignCenter");
 
			HtmlPanelGrid grid = new HtmlPanelGrid();
			grid.setBorder(0);
			grid.setColumns(2);
 
			HtmlOutputText labelName = new HtmlOutputText();
			labelName.setValue("Nom de l'acteur : ");
 
			HtmlOutputText labelDescription = new HtmlOutputText();
			labelDescription.setValue("Description de l'acteur : ");
 
			HtmlInputText inputText = new HtmlInputText();
			inputText.setValueExpression("value", createValueExpression("#{acteur.acteurs[" + i + "].name}", String.class));
			inputText.isRequired();
 
			HtmlInputTextarea textarea = new HtmlInputTextarea();
			textarea.setValueExpression("value", createValueExpression("#{acteur.acteurs[" + i + "].description}",String.class));
			textarea.isRequired();
			textarea.setCols(100);
			textarea.setRows(10);
 
			UIParameter parameter = new UIParameter();
			parameter.setValue(i);
 
			grid.getChildren().add(labelName);
			grid.getChildren().add(inputText);
			grid.getChildren().add(labelDescription);
			grid.getChildren().add(textarea);
 
 
			form.getChildren().add(grid);
 
			barItem.getChildren().add(form);
			bar.getChildren().add(barItem);
		}
	}
 
	public List<Acteur> getActeurs() {
		return acteurs;
	}
 
	public void setActeurs(List<Acteur> acteurs) {
		this.acteurs = acteurs;
	}
 
	public DossierBean getDossier() {
		return dossier;
	}
 
	public void setDossier(DossierBean dossier) {
		this.dossier = dossier;
	}
 
	public int getNb() {
		return nb;
	}
 
	public void setNb(int nb) {
		this.nb = nb;
	}
 
	public HtmlPanelBar getBar() {
 
		return bar;
	}
 
	public void setBar(HtmlPanelBar bar) {
		this.bar = bar;
	}
 
	private ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		return facesContext.getApplication().getExpressionFactory().createValueExpression(facesContext.getELContext(), valueExpression, valueType);
	}
 
	private MethodExpression createActionExpression(String actionExpression, Class<?> returnType) {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		return facesContext.getApplication().getExpressionFactory().createMethodExpression(facesContext.getELContext(), actionExpression, returnType, new Class[0]);
	}
 
}
DossierBean.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
public void addActeur(List<Acteur> acteurs) {
	for (Acteur acteur : acteurs) {
		System.out.println(acteur.toString());
	}
	currentDossier.setActeurs(acteurs);
}
Résultat console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
ENREGISTRER : DEBUT
Nom : Mathieu	Description : dsfsdfsdfssdf
Nom : null	        Description : null
ENREGISTRER : FIN