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 :

PrimeFaces Datatable et RowEditListener


Sujet :

JSF Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 210
    Points : 87
    Points
    87
    Par défaut PrimeFaces Datatable et RowEditListener
    Bonjour,

    J'ai une DataTable avec Primefaces et un RowEditListener
    Quand je valide ma ligne j'ai bien ma méthode qui est invoquée,
    mais toujours avec l'ancienne valeur, jamais avec la nouvelle valeur du champs.


    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
     
    public class Toto implements Serializable {
     
        /**
        *
        */
       private static final long serialVersionUID = -8146181369829766354L;
     
       /**
        *
        */
       private Long id;
     
        /**
         *
         */
        private String name;
     
     
        /**
         * @return
         */
        public Long getId() {
            return id;
        }
     
        /**
         * @param id
         */
        public void setId(Long id) {
            this.id = id;
        }
     
        /**
         * @return
         */
        public String getName() {
            return name;
        }
     
        /**
         * @param name
         */
        public void setName(String name) {
            this.name = name;
        }
     
     
     
        @Override
       public boolean equals(Object obj) {
          if(obj == null)
             return false;
          if(!(obj instanceof Toto))
             return false;
     
          Long test1 = this.id;
          Long test2 = ((Toto)obj).getId();
          return test1.equals(test2);
       }
     
       @Override
       public int hashCode() {
           int hash = 1;
           return hash * 31 + name.hashCode();
       }
     
    }

    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
     
    @ManagedBean
    @SessionScoped
    public class TestData implements Serializable {
     
     
       /**
        *
        */
       private static final long serialVersionUID = 773591323733815749L;
     
     
       public List<Toto> getListTotos(){
          List<Toto> list = new ArrayList<Toto>();
     
          Toto t1 = new Toto();
          t1.setId(1l);
          t1.setName("toto1");
          list.add(t1);
     
          Toto t2 = new Toto();
          t2.setId(2l);
          t2.setName("toto2");
          list.add(t2);
     
          Toto t3 = new Toto();
          t3.setId(3l);
          t3.setName("toto3");
          list.add(t3);
     
          return list;
       }
     
       public void onEditRow(RowEditEvent event) {
          Toto editedCar = (Toto) event.getObject();
          System.out.println(editedCar.getId());
          System.out.println(editedCar.getName());
          System.out.println();
          //persist to database
       }
     
    }
    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
     
    <p:dataTable  var="toto" value="#{testData.listTotos}"
                         rowEditListener="#{testData.onEditRow}"
                       >
     
     
                            <f:facet name="header">
                                        Toto list
                            </f:facet>
     
                            <p:column headerText="Options" style="width:50px">
                               <p:rowEditor />
                            </p:column>
     
                            <p:column     style="width:450px"
                                         headerText="RECIPIENT" footerText="exact" 
                                         filterMatchMode="exact"> 
                                     <p:cellEditor>
                                        <f:facet name="output">
                                           <h:outputText value="#{toto.id}" />
                                        </f:facet>
                                        <f:facet name="input">
                                           <h:inputText value="#{toto.id}"  />
                                        </f:facet>
                                     </p:cellEditor>
                                  </p:column>
     
                            <p:column     style="width:450px"
                                         headerText="RECIPIENT" footerText="exact" 
                                         filterMatchMode="exact"> 
                                     <p:cellEditor>
                                        <f:facet name="output">
                                           <h:outputText value="#{toto.name}" />
                                        </f:facet>
                                        <f:facet name="input">
                                           <h:inputText value="#{toto.name}"  />
                                        </f:facet>
                                     </p:cellEditor>
                                  </p:column>
     
     
                         </p:dataTable>

    Quoi que je renseigne dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:inputText value="#{toto.name}"  />
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Toto editedCar = (Toto) event.getObject();
          System.out.println(editedCar.getId());
          System.out.println(editedCar.getName());
    Me renvoie toujours toto2


    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    je pense que ton problème vient du fait que les évéments liés à des listeners de type "valuechangelistener" sont déclenchés avant la phase de mise à jour du modèle (UPDATE_MODEL_VALUES), et donc avant que tes getters/setters soient appelés (donc a priori rien à voir avec primefaces). Donc il est normal que tu aies les anciennes valeurs.

    Pour corriger ça, il y a plusieurs solutions; je m'étais inspiré de ce post à l'époque pour régler ce problème. J'ai une petite préférence pour la méthode qui consiste à reposter l'événement en le décalant à la phase de mise à jour du modèle afin qu'il soit traité après l'appel des getters/setters.

    J'espère que ça te sera utile!
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  3. #3
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Bonjour,

    J’ai exactement le même problème, si possible de donner un exemple de ce que tu dis.

    parce-que je n'ai pas bien comprit ce que ta dit

    Merci d'avance

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/11/2018, 15h04
  2. PrimeFaces Datatable et RowEditListener
    Par geforce dans le forum JSF
    Réponses: 2
    Dernier message: 17/10/2013, 18h04
  3. [PrimeFaces] dataTable cellEditor
    Par empire.dev dans le forum JSF
    Réponses: 2
    Dernier message: 01/08/2013, 08h11
  4. Réponses: 2
    Dernier message: 21/12/2012, 11h28
  5. Réponses: 5
    Dernier message: 25/06/2012, 12h04

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