Bonjour!
J'essaie actuellement de faire un formulaire relativement compliqué sous forme de tableau à deux dimensions, je m'explique :
J'ai les objets suivant :
J'affiche un tableau (généré dynamiquement via des ui:repeat dans un h:form) de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class InnerItem { private String value; // + getter/setter + un constructeur pour initialiser "value" } public class Item { private String name; // + getter/setter private List<InnerItem> innerItems; // + getter/setter }
Dans l'lidée je peux avoir plus de colonnes "Valeur" que ça mais pour simplifier le code je me limite à 4 colonnes ici.
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 <h:form> <table> <tr> <th>Nom</th> <th>Valeur 1</th> <th>Valeur 2</th> <th>Valeur 3</th> <th>Valeur 4</th> </tr> <ui:repeat value="#{testBean.items}" var="item"> <tr> <td><h:inputText value="#{item.name}" /></td> <ui:repeat value="#{item.innerItems}" var="#{innerItem}"> <td><h:inputText value="#{innerItem.value}" /></td> </ui:repeat> </tr> </ui:repeat> </table> <h:commandButton value="test" actionListener="#{testBean.test}" process="@form" update="@form" /> </h:form>
Mon Bean :
J'arrive bien à afficher mon formulaire avec les différentes valeurs, CEPENDANT là où j'arrive à mettre à jour "name" de l'objet "Item", je n'arrive pas à mettre à jour les valeurs "value" de mes objets "InnerItem"!!
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 @Named @ViewScoped // J'utilise Seam Faces public class TestBean { private List<Item> items; // +getter/setter public void test() { // Pas moyen de récupérer ici des objets InnerItem (value) modifiés, alors que les objets Item (name) sont modifiés! } public List<Item> getItems() { if (this.items == null) { this.items = new ArrayList<Item>(); for (int i = 0; i < 10; ++i) { Item item = new Item(); item.setName("Item " + i); item.setInnerItems(new ArrayList<InnerItem>()); for (int j = 0; j < 4; ++j) { item.getInnerItems().add(new InnerItem("Value " + (i+j))); } this.items.add(item); } } return this.items; } }
Si quelqu'un avait une idée pour me débloquer ce serait avec joie!
Cordialement,
Edit : Quelques corrections sur mon code
Partager