Formulaire dynamique avec deux niveaux de ui:repeat
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:
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:
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:
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