Bonjour!

J'essaie actuellement de faire un formulaire relativement compliqué sous forme de tableau à deux dimensions, je m'explique :

J'ai les objets suivant :

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
}
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
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>
Dans l'lidée je peux avoir plus de colonnes "Valeur" que ça mais pour simplifier le code je me limite à 4 colonnes ici.

Mon Bean :

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;
    }
}
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"!!

Si quelqu'un avait une idée pour me débloquer ce serait avec joie!

Cordialement,

Edit : Quelques corrections sur mon code