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 :

Insérer une ligne vide à une datatable richfaces.


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Par défaut Insérer une ligne vide à une datatable richfaces.
    Salut !

    J'ai pour besoin d'insérér via un bouton, sur une pages JSF + richface, une ligne à une rich:datatable.

    J'ai un tableau richface, qui me permet d'entrer les valeurs d'un produit : nom, référence... pour un produit...

    Ensuite, je veux que, si besoin est d'insérer un autre produit dans cette "commande", je clique sur un bouton "ajouter ligne" et que celui ci me rajoute une ligne vide à ma table, pour que je puisse saisir...

    N'y a t'il pas une fonction simple pour faire cela ?
    Dois je passer par du Ajax4Jsf ?

    Merci pour vos conseils.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    C'est plutôt simple en fait. Il te suffit d'ajouter un élément dans la liste qui est itérée par ton datatable, puis de rafraichir ton tableau.

    Ainsi, si tu avais 3 éléments, ton tableau affichait 3 lignes. Le fait d'ajouter un 4e éléments (avec des propriétés à null), fera affichée 4 lignes dans ton tableau, dont une vide.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Par défaut
    ok, cela paraît simple apparemment, mais pas tant que cela :

    En fait c'est une création de liste d'objet dynamique à l'intérieur d'un autre objet :

    Exemple : Classe Sac
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class Sac {
    String name;
    List<Bille> billes;
    }
    Exemple : Classe Doc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class Bille {
    String name;
    Sac sac;
    }
    Avec une relation oneToMany entre les deux.

    Dans mon formulaire de création, je veux créer un sac (id autogénéré, et son nom), puis sur la même page, lui ajouter des Bille, dynamiquement, et enfin persister le tout.

    De plus, j'utilise seam, et j'aime pas du tout ce Framework (c'est nul ...Bref) :

    Donc, coté vue, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:inputtext id="sac" value="#{sac.instance.name}"/>
    <rich:dataTable id="billes" var="uneBille" value="je sais pas">
    déja, ici je ne suis pas certains de ce que je dois mettre ...

    Si je lui mets, une List de bille dans ma rich:datatable dans "value", ça marche bien ca itère, mais moi je ne veux pas lister, je veux pouvoir créér une Liste vide, et saisir, le nom d'une Bille qui serait lié au Sac, puis soit valider, soit ajouter (l'ajout de ma ligne vide dynamique à saisir) des autres Billes, puis valider ...

    Je ne connais donc pas le nombre de Bille qu'il y aura à l'avance, et je n'arrive pas à les lier au Sac ... même une seule pour commencer ...

    Ca doit être quelquechose comme cela, mais je ne sais pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <h:inputtext id="sac" value="#{sac.instance.name}"/>
    <rich:dataTable id="billes" var="_uneBille" value="#{sac.instance.billes}">
    <h:column>
    <f:facet name="header" value="Nom bille"/>
    <h:inputtext id="nomBille" value="#{_uneBille.name}"/>
    <h:column/>
    mais ma value="#{sac.instance.billes}" ici, ça ne doit pas être ça ...

    Bref ça me soule un peu, de pas avancer la dessus ...

    Merci si quelqu'un peut m'aider à avancer...

    Car après le reste est selon le même principe ...

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Tout d'abord, tu itères sur les billes de ton sac :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <rich:datatable id="listeDesBilles" var="bille" value="#{monSac.billes}">
      <rich:column>
        <f:facet name="header">Nom</f:facet>
        <h:inputText value="#{bille.name}"/>
      </rich:column>
      ...
    </rich:datatable>
    Comme ça, si ton sac contient 2 billes, tu vas avoir un tableau de 2 lignes, avec un champ de saisie sur le nom de chacune des billes.

    Maintenant, on peut ajouter un bouton qui ajoutera une bille à ton sac :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a4j:commandButton value="Ajouter une bille" actionListener="#{monSac.ajouterUneBille}" reRender="listeDesBilles"/>
    La méthode ajouterUneBille va simplement ajouter un éléments dans ta List<Bille> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void ajouterUneBille(ActionEvent evt) {
        // Création d'une nouvelle bille vide.
        Bille bille = new Bille();
        bille.setSac(this);
        // Ajout de la bille dans la liste.
        this.billes.add(bille);
    }
    Comme j'ai mis un reRender="listeDesBilles" dans mon bouton (action Ajax), le tableau va se rafraichir. Cette fois-ci, ma liste de billes va contenir 3 billes, et non plus 2. Comme nous n'avons pas saisi de nom dans la 3e bille, le champ de saisie apparaitra vide.

    J'espère que c'est plus clair maintenant...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Par défaut
    Tout d'abord, tu itères sur les billes de ton sac :

    Comme ça, si ton sac contient 2 billes, tu vas avoir un tableau de 2 lignes, avec un champ de saisie sur le nom de chacune des billes.
    Oui, mais justement, je veux que ma liste soit vide, donc dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rich:datatable id="listeDesBilles" var="bille" value="#{monSac.billes}">
    Il faut que ma liste, soit vide et juste initialisé ...

    Donc, je suppose qu'il suffit que j'initialise ici ma liste comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Class Sac {
    String name;
    List<Bille> billes = new ArrayList<Bille>();
    }
    Mais, pour que ma liste me créé un premier élément vide à saisir, il ne lui faut pas un premier élément ?

    2ème question, est ce que cela pointe vers une entité Sac, ou un manageBean ?

    Actuellement, j'utilise mon entity ... selon ton exemple, cela à plutôt l'air d'être un ManageBean ... donc ok, je peux le créer, mais le problème, c'est comment mon objet va être persisté ?

    Ah, ou alors il sera persisté, quand à la fin je ferais un save de mon instance de Sac ...

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Rien ne t'empêche d'initialiser ta liste avec un élément. Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    billes = new ArrayList<Bille>();
    ajouteBille(null); // Tant qu'à faire, autant réutiliser le code, plutôt que dupliquer du code...
    Quant à ton autre question, en fait j'ai simplifié le code, mais le mieux étant en effet d'avoir un bean qui fournit ton sac :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <rich:datatable value="#{monBean.sac.billes}" ...>
        ...

    Donc ton bean fournit un getter getSac() qui retourne le sac courant...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 4
    Dernier message: 25/10/2011, 10h13
  4. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  5. [MySQL] Comment insérer 6 lignes en une fois dans une base mysql avec du PHP ?
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/02/2008, 14h39

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