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 :

Modification de Row Edit dans une DataTable


Sujet :

JSF Java

  1. #21
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Categorie categ = (Categorie) event.getObject();  
     categ = categorieManager.getCategorieById(categ.getNumeroCategorie());
     categorieManager.updatecat(categ);
    en même temps, cette tentative ne marchera pas ...

    ligne 1 - tu récupères l'instance modifiée
    ligne 2 - avec son Id, tu récupères une instance "managée" par JPA et tu écrases la référence qui détenait pourtant l'instance modifiée
    ligne 3 - tu sauvegardes celui que tu viens juste de lire de la base ...

    C'est normal que ça ne prenne pas tes modifs.

    En tout cas, tu passes bien dans la méthode, et ton instance est peuplée sur l'Event, ton problème ne vient donc pas du cellEditor qui a fonctionné, lui.

  2. #22
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    les modifications que j'insére dans le h:inputext ne sont pas pris en considération

    il stock que les anciennes valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Categorie categ = (Categorie) event.getObject();  
     categ = categorieManager.getCategorieById(categ.getNumeroCategorie());
     categorieManager.updatecat(categ);
    ne marche pas comment je fais ?
    t'as une solution ?

    j'ai fait un petit test et ca marche dans la Base de données

    donc le problème de vient pas de la méthode de modification

    mais de la valeur saisie dans le inputext il la prends pas en charge


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
     
     public void saveCategorie(RowEditEvent event)
        {
     
     
        Categorie categ = (Categorie) event.getObject();  
     categ = categorieManager.getCategorieById(categ.getNumeroCategorie());
     
     categ.setLibelle("serveurssss");
     categorieManager.updatecat(categ);
     
        }

  3. #23
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    je pense qu'il faut que tu te reposes un peu, regarde ton code. Ton "algorithme" est faux comme je te l'ai indiqué plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Categorie categ = (Categorie) event.getObject(); 
    categ = categorieManager.getCategorieById(categ.getNumeroCategorie());
    categorieManager.updatecat(categ);
    tu enregistres (ligne 3) ce que tu viens de récupérer (ligne 2) ... la ligne 1 du coup est totalement ignorée (et le libellé que l'instance categ contenait à ce moment là est perdu !!!) ...

    enlève la ligne 2 et ça devrait aller mieux.

    Je pense que tu n'as pas vérifié que le libellé de "categ" de la ligne 1 contenait bien ce que tu avais saisi dans ton tableau.

    si la méthode updatecat() fait bien un "merge", voici ce que tu devrais avoir UNIQUEMENT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Categorie categ = (Categorie) event.getObject(); 
    categorieManager.updatecat(categ);

  4. #24
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    Salut,

    la méthode d'update marche bien j'ai fais un autre scénario celui que cliquer sur details et de modifier une information et ca se modifie le problème vient
    de la nouvelle valeur saisie il la prends pas en charge pour faire la modification


  5. #25
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    salut, au risque de me répéter une nouvelle fois ...

    ton code est FAUX.

    Il ne va pas PARCEQUE :
    1 - tu fais un "find" qui te récupères une instance peuplée issue de la base
    2 - tu sauvegardes l'instance que le find viens juste de te retourner avec le update (ce qui revient à sauvegarder l'objet que tu viens juste de lire de la base)

    Comment veux-tu, avec ces 2 lignes qu'il écrive en base les données qui ont été saisie dans le tableau et que tu ignore totalement ?

    Solution : NE PAS faire le find ! (enlève la ligne de code) !
    peux-tu aussi debugger (des System.out.println("")) juste après la première ligne, histoire de voir si ta saisie est bien prise en compte dans "categ" retourné par "event.getObject()"

    Je t'aide, ton code doit être celui-là.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Categorie categ = (Categorie) event.getObject(); 
     System.out.println("Nouveau libellé ? " + categ.getLibelle()); 
     categorieManager.updatecat(categ);
     System.out.println("Sauvegarde okay");
    on va y arriver, mais il faut aussi que tu y mettes du tien si tu fais pas ce que je demande, on va avoir du mal ...

    et dis moi ce que la console affiche, parce que à part "ça marche pas" ... j'ai pas beaucoup d'info ...

  6. #26
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    Salut ,

    D'accord je vais faire ce que tu m'as dis à la lettre j'ai bien testé il me donne l'ancienne valeur et pas la nouvelle valeur saisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public void saveCategorie(RowEditEvent event)
        {
        Categorie categ = (Categorie) event.getObject(); 
     
        JOptionPane.showMessageDialog(null, "Nouveau libellé ? " + categ.getLibelle());
     
    categorieManager.updatecat(categ);
     
     
        JOptionPane.showMessageDialog(null,"Sauvegarde okay");
    }

  7. #27
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    à tout hasard, est-ce que la classe Categorie a bien les méthodes equals() et hashcode() que tu as bien redéfinies ?

    Ce serait rageant que ce soit ça, mais j'étais parti du postulat que tu les avais forcément puisque c'est une classe persistante.

  8. #28
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    ui exactement netbeans les génére par défaut



    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
     
     
    @Override
        public int hashCode() 
        {
            int hash = 0;
            hash += (numeroCategorie != null ? numeroCategorie.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object)
        {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Categorie)) 
            {
                return false;
            }
            Categorie other = (Categorie) object;
            if ((this.numeroCategorie == null && other.numeroCategorie != null) || (this.numeroCategorie != null && !this.numeroCategorie.equals(other.numeroCategorie))) {
                return false;
            }
            return true;
        }

  9. #29
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Si tu patientes 1 grosse semaine je te ferai un projet démo sous netbeans, car la je suis en déplacement avec de la 3g limitée.

  10. #30
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    toujours pas de réponse ?

  11. #31
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par othman22222 Voir le message
    tjrs pas de réponse ???
    Eh bah t'es bien difficile toi. Tu as tout de même eu ce genre de réponse là :
    Citation Envoyé par fxrobin Voir le message
    Si tu patientes 1 grosse semaine je te ferai un projet démo sous netbeans [...]
    Je ne vois pas ce qu'il te faudrait de plus.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  12. #32
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    effectivement, une semaine faisant 7 jours ...
    une grosse semaine ça fait fatalement plus genre 8 ou 10 ... et en tout cas pas 4 jours

    ps :j'suis toujours indispo

  13. #33
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    daccord compris

  14. #34
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Salut,

    voilà la démo en PJ.

    Donc la classe métier :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    package model;
     
    import java.util.UUID;
     
    /**
     * Représente une entité "Book", comportant un titre et un auteur.
     * 
     * @author FX
     */
    public class Book
    {
        private UUID id;
        private String titre;
        private String auteur;
     
        /**
         * @return the id
         */
        public UUID getId()
        {
            return id;
        }
     
        /**
         * @param id the id to set
         */
        public void setId(UUID id)
        {
            this.id = id;
        }
     
        /**
         * @return the titre
         */
        public String getTitre()
        {
            return titre;
        }
     
        /**
         * @param titre the titre to set
         */
        public void setTitre(String titre)
        {
            this.titre = titre;
        }
     
        /**
         * @return the auteur
         */
        public String getAuteur()
        {
            return auteur;
        }
     
        /**
         * @param auteur the auteur to set
         */
        public void setAuteur(String auteur)
        {
            this.auteur = auteur;
        }
     
     
    }
    la factory (mais j'aurai pu m'en passer)

    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
     
    package model;
     
    import java.util.UUID;
     
    /**
     * Factory pour les instances de la classe Book
     * @author FX
     */
    public class BookFactory
    {
        public static Book newInstance()
        {
            Book newBook = new Book();
            newBook.setId(UUID.randomUUID());
            return newBook;
        }
     
        public static Book newInstance(String titre, String auteur)
        {
            Book newBook = BookFactory.newInstance();
            newBook.setTitre(titre);
            newBook.setAuteur(auteur);
            return newBook;
        }
    }
    la partie qui simule une base de données

    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
     
    package model;
     
    import java.util.ArrayList;
    import java.util.List;
     
    /**
     * Simule une classe service d'accès à une base de données de livres
     * @author FX
     */
    public class BookService
    {
     
        private final static List<Book> list = new ArrayList<Book>();
     
        public static List<Book> getList()
        {
            return list;
        }
     
        /*
         * initialisation de la liste des livres en mémoire.
         */
        static
        {
            list.add(BookFactory.newInstance("Le petit prince", "Saint Exupéry"));
            list.add(BookFactory.newInstance("Le rouge et la noir", "Stendhal"));
            list.add(BookFactory.newInstance("L'avare", "Molière"));
        }
    }
    le ManagedBean JSF :

    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
    31
    32
    33
    package vue;
     
    import java.util.List;
    import javax.faces.application.FacesMessage;
    import javax.faces.bean.ManagedBean;
    import javax.faces.context.FacesContext;
    import model.Book;
    import model.BookService;
    import org.primefaces.event.RowEditEvent;
     
    @ManagedBean
    public class BookListBean
    {
     
        public List<Book> getBookList()
        {
            return BookService.getList();
        }
     
     
        public void editEvent(RowEditEvent event)
        {
            Book editedBook = (Book) event.getObject();
     
            System.out.println("Le livre mis à jour : " + editedBook.getId().toString());
            System.out.println("Titre : " + editedBook.getTitre());
            System.out.println("Auteur : " + editedBook.getAuteur());
     
            String message = String.format("Livre %s mis à jour : %s (%s)", editedBook.getId().toString(), editedBook.getTitre(), editedBook.getAuteur());
            FacesMessage facesMessage = new FacesMessage(message);
            FacesContext.getCurrentInstance().addMessage("growl", facesMessage);
        }
    }

    et enfin la page web JSF 2 :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:p="http://primefaces.org/ui"
          xmlns:f="http://java.sun.com/jsf/core">
        <h:head>
            <title>PrimeFaces RowEditor Demo - par fxrobin</title>
        </h:head>
        <h:body>
            <h:form id="mainForm">
                <p:growl id="growl" />
     
                <p:dataTable  id="bookDataTable" 
                              value="#{bookListBean.bookList}" 
                              var="book" 
                              editable="true">
                    <p:column headerText="ID" style="width : 200px ; font-size : 9px">#{book.id}</p:column>
                    <p:column headerText="Titre">
                        <p:cellEditor>
                            <f:facet name="output">#{book.titre}</f:facet>
                            <f:facet name="input"><p:inputText value="#{book.titre}" /></f:facet> 
                        </p:cellEditor>
                    </p:column>
                    <p:column headerText="Auteur">
                        <p:cellEditor>
                            <f:facet name="output">#{book.auteur}</f:facet>
                            <f:facet name="input"><p:inputText value="#{book.auteur}" /></f:facet> 
                        </p:cellEditor>
                    </p:column>
                    <p:column headerText="Actions"><p:rowEditor /></p:column>
     
                    <p:ajax event="rowEdit" 
                            update="bookDataTable :mainForm:growl" 
                            listener="#{bookListBean.editEvent}" />
                </p:dataTable>
            </h:form>
        </h:body>
    </html>
    Le projet NetBeans est disponible en PJ aussi.
    Dans la méthode qui écoute le RowEvent, il suffirait de faire un "merge", mais avec cette démo on voit bien que la modification est prise en compte sur la bonne instance.

    A+
    Fichiers attachés Fichiers attachés

  15. #35
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    Salut,

    oui j'ai testé ce que t'as passé ça marche avec une liste

    mais en ajoutant le merge cest pas pris en compte jai même ajouté le jar aussi


    la méthode merge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
              public Categorie update(Categorie categorie) 
        {
             return em.merge(categorie);
        }

    le managedbean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                     public void editEvent(RowEditEvent event)
        {
     
            Categorie   editedcategorie =(Categorie) event.getObject();
               categorie= categorieManager.update(editedcategorie );
              System.out.println("La Categorie mis à jour : " + editedcategorie.getNumeroCategorie());
            System.out.println("Libelle : " + editedcategorie.getLibelle());
     
      String message = String.format("Categorie ", editedcategorie.getNumeroCategorie(),editedcategorie.getLibelle());
            FacesMessage facesMessage = new FacesMessage(message);
            FacesContext.getCurrentInstance().addMessage("growl", facesMessage);
     
    }



    la vue index


    Code xml : 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
           xmlns:h="http://java.sun.com/jsf/html"
           xmlns:ui="http://java.sun.com/jsf/facelets"
           xmlns:f="http://java.sun.com/jsf/core"
           xmlns:p="http://primefaces.prime.com.tr/ui" >
        <h:head>
            <title>Ecommerce</title>
        </h:head>
        <h:body>
     
     
                  <h:form id="mainForm">
                <p:growl id="growl" />
     
                <p:dataTable  id="bookDataTable" 
                              value="#{categorieMBean.categories}" 
                              var="item" 
                              editable="true">
                    <p:column headerText="ID" style="width : 200px ; font-size : 9px">#{item.numeroCategorie}</p:column>
     
                    <p:column headerText="Titre">
                        <p:cellEditor>
                            <f:facet name="output">#{item.libelle}</f:facet>
                            <f:facet name="input"><p:inputText value="#{item.libelle}" /></f:facet> 
                        </p:cellEditor>
                    </p:column>
     
                    <p:column headerText="Actions"><p:rowEditor /></p:column>
     
                    <p:ajax event="rowEdit" 
                            update="bookDataTable :mainForm:growl" 
                            listener="#{categorieMBean.editEvent}" />
                </p:dataTable>
     
     
            </h:form>
     
        </h:body>
    </html>



    Quand je modifie les informatiins ne change pas

    et growl affiche pas les informations enregistrés
    Images attachées Images attachées  

  16. #36
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    ton "em.merge()" il est codé dans un EJB 3 Session ?

    tu peux me passer ton projet NetBeans qui ne marche pas que je regarde ... car franchement je n'ai aucune difficulté à sauvegarder ce genre de modifs depuis un celleditor ... il doit y avoir un problème ailleurs que je ne vois pas avec le code source que tu me montres. ..

  17. #37
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    je vais vous envoyer lentité catégorie + son manager + son managedBean + linterface et regarde

  18. #38
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    entité
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package entities;
     
    import java.io.Serializable;
    import java.util.List;
    import javax.persistence.*;
    import javax.validation.constraints.Size;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlTransient;
     
    /**
     *
     * @author user
     */
    @Entity
    @Table(name = "categorie")
    @XmlRootElement
    @NamedQueries({
        @NamedQuery(name = "Categorie.findAll", query = "SELECT c FROM Categorie c"),
        @NamedQuery(name = "Categorie.findByNumeroCategorie", query = "SELECT c FROM Categorie c WHERE c.numeroCategorie = :numeroCategorie"),
        @NamedQuery(name = "Categorie.findByLibelle", query = "SELECT c FROM Categorie c WHERE c.libelle = :libelle")})
    public class Categorie implements Serializable 
    {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
       // @NotNull
        @Column(name = "numeroCategorie")
        private Integer numeroCategorie;
        @Size(max = 254)
        @Column(name = "libelle")
        private String libelle;
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "numeroCategorie")
        private List<Produit> produitList;
     
        public Categorie() 
        {
        }
     
     
          public Categorie(String libelle) 
          {
            this.libelle = libelle;
        }
     
        public Categorie(Integer numeroCategorie) 
        {
            this.numeroCategorie = numeroCategorie;
        }
     
        public Integer getNumeroCategorie() 
        {
            return numeroCategorie;
        }
     
        public void setNumeroCategorie(Integer numeroCategorie)
        {
            this.numeroCategorie = numeroCategorie;
        }
     
        public String getLibelle() 
        {
            return libelle;
        }
     
        public void setLibelle(String libelle)
        {
            this.libelle = libelle;
        }
     
        @XmlTransient
        public List<Produit> getProduitList() 
        {
            return produitList;
        }
     
        public void setProduitList(List<Produit> produitList) 
        {
            this.produitList = produitList;
        }
     
        @Override
        public int hashCode() 
        {
            int hash = 0;
            hash += (numeroCategorie != null ? numeroCategorie.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object)
        {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Categorie)) 
            {
                return false;
            }
            Categorie other = (Categorie) object;
            if ((this.numeroCategorie == null && other.numeroCategorie != null) || (this.numeroCategorie != null && !this.numeroCategorie.equals(other.numeroCategorie))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() 
        {
            return "entities.Categorie[ numeroCategorie=" + numeroCategorie + " ]";
        }
     
    }



    la méthode merge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
              public Categorie update(Categorie categorie) 
        {
             return em.merge(categorie);
        }

    méthode update dans le managedbean et la méthode editevent


    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
    31
     
     
              public String update() 
            {  
            System.out.println("###UPDATE###");  
            categorie = categorieManager.update(categorie);
     
            return "layoutfull_categorie";  
        }  
     
     
        private Categorie categorie;
     
     
                     public void editEvent(RowEditEvent event)
        {
     
            Categorie   editedcategorie =(Categorie) event.getObject();
     
     
        categorie= categorieManager.update(categorie);
     
     
            System.out.println("La Categorie mis à jour : " + editedcategorie.getNumeroCategorie());
            System.out.println("Libelle : " + editedcategorie.getLibelle());
     
     
            String message = String.format("Categorie ", editedcategorie.getNumeroCategorie(),editedcategorie.getLibelle());
            FacesMessage facesMessage = new FacesMessage(message);
            FacesContext.getCurrentInstance().addMessage("growl", facesMessage);
        }




    la forme ou il ya cell editor
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
           xmlns:h="http://java.sun.com/jsf/html"
           xmlns:ui="http://java.sun.com/jsf/facelets"
           xmlns:f="http://java.sun.com/jsf/core"
           xmlns:p="http://primefaces.prime.com.tr/ui" >
        <h:head>
            <title>Ecommerce</title>
        </h:head>
        <h:body>
     
     
                  <h:form id="mainForm">
                <p:growl id="growl" />
     
                <p:dataTable  id="bookDataTable" 
                              value="#{categorieMBean.categories}" 
                              var="item" 
                              editable="true">
                    <p:column headerText="ID" style="width : 200px ; font-size : 9px">#{item.numeroCategorie}</p:column>
     
                    <p:column headerText="Titre">
                        <p:cellEditor>
                            <f:facet name="output">#{item.libelle}</f:facet>
                            <f:facet name="input"><p:inputText value="#{item.libelle}" /></f:facet> 
                        </p:cellEditor>
                    </p:column>
     
                    <p:column headerText="Actions"><p:rowEditor /></p:column>
     
                    <p:ajax event="rowEdit" 
                            update="bookDataTable :mainForm:growl" 
                            listener="#{categorieMBean.editEvent}" />
                </p:dataTable>
     
     
            </h:form>
     
        </h:body>
    </html>



  19. #39
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Salut,

    en fait je viens de comprendre d'où vient le problème : la récupération de ta liste. Il faut en fait qu'elle soit "stockée" dans une liste par le ManagedBean et pas récupérer systèmatiquement par ta façade.



    Pour ce faire, perso je fais comme ça avec @PostConstruct :

    le ManagedBean :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    package vue;
     
    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.ejb.EJB;
    import javax.faces.application.FacesMessage;
    import javax.faces.bean.ManagedBean;
    import javax.faces.context.FacesContext;
    import model.Book;
    import model.BookFacade;
    import org.primefaces.event.RowEditEvent;
     
    @ManagedBean
    public class BookListBean
    {
     
        @EJB
        BookFacade facade;
     
        private List<Book> bookList;
     
        @PostConstruct
        public void init()
        {
            bookList = facade.findAll();
        }
     
        public List<Book> getBookList()
        {
            return this.bookList;
        }
     
        public void editEvent(RowEditEvent event)
        {
            Book editedBook = (Book) event.getObject();
     
            // sauvegarde via la persistance
            facade.edit(editedBook);
     
            String message = String.format("Livre %s mis à jour : %s (%s)", 
                                           editedBook.getId(), 
                                           editedBook.getTitre(), 
                                           editedBook.getAuteur());
            FacesMessage facesMessage = new FacesMessage(message);
            FacesContext.getCurrentInstance().addMessage("growl", facesMessage);
        }
    }
    le reste de l'appli ne change pas, si ce n'est que j'utilise des EJB 3 pour la persistance et que la méthode pour sauvegarder est "edit" de la façade générée par NetBeans (que je n'aime pas trop d'ailleurs, au demeurant).

    Le projet est en PJ si tu veux voir.

    et là ça marche parfaitement avec la persistance puisque PrimeFaces a besoin d'une liste "stable" pour la mettre à jour et pas récupérée à chaque fois (donc nouvelle instance)


    Tiens moi au courant, mais là normalement tu as tout ce qu'il faut pour que ça fonctionne.

    A+
    Fichiers attachés Fichiers attachés

  20. #40
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 110
    Par défaut
    oui ça marche merci beaucoup pour votre aide


    j'ai un autre problème sur le FileUpload de Primefaces


    je veux lorsque que j'ajoute un produit

    le chemin du champ image qui se trouve dans la table produit se met à jour avec

    le nouveau chemin une idée sur ca ??? je vous montre le code ???

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [PrimeFaces] Editer dans une DataTable
    Par shagun dans le forum JSF
    Réponses: 7
    Dernier message: 20/09/2012, 19h43
  2. Réponses: 3
    Dernier message: 19/07/2006, 14h28
  3. [MFC]Champ d'edition dans une Toolbar?
    Par kacedda dans le forum MFC
    Réponses: 3
    Dernier message: 08/07/2005, 11h11
  4. [C#] Modifier une valeur dans une DataTable
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/05/2005, 10h45
  5. Modif d'un ini dans une combo box
    Par Julien.alkaza dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/04/2005, 23h39

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