IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Formulaire dynamique avec deux niveaux de ui:repeat


Sujet :

JSF Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut 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 : 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

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Mea culpla, tout fonctionne!

    Quelques explications...

    La pluspart du temps je simplifie mon code au maximum avant de le poster afin d'essayer d'isoler le problème et de faciliter la compréhension pour les lecteurs. Cette fois ci je me rends compte qu'en simplifiant mon code à ce point il fonctionne, je compare donc avec le code qui me pose réellement problème, et je découvre que l'éditions d'éléments de liste n'est pas possible.

    Je cherchais en fait à directement à manipuler les éléments de ma liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private List<InnerItem> innerItems;
    En essayant d'en retirer (passer l'élément à null) ou à le changer par une autre instance, mais ça n'a pas l'air de fonctionner. Au final j'ai créé un objet équivalent à mon "InnerItem" qui "porte" un attribut du type de l'objet sur lequel je travaillais. J'ai une mécanique assez lourde lors du traitement du formulaire mais le résultat est celui que je cherchais.

    Merci, à bientôt!

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Composant] Table avec deux niveaux de header
    Par beuhnoix dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 10/01/2008, 11h47
  2. formulaire dynamique avec Label For
    Par stardeus dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2007, 13h39
  3. Utilisation des formulaires dynamiques avec struts
    Par nabdelghafour dans le forum Struts 1
    Réponses: 1
    Dernier message: 30/03/2007, 11h58
  4. Réponses: 13
    Dernier message: 08/02/2007, 17h05
  5. Formulaire Dynamique Avec Struts
    Par tarakakik dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/08/2006, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo