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 :

Datatable PrimeFaces 3.2


Sujet :

JSF Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Concepteur architecte en informatique
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Concepteur architecte en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Datatable PrimeFaces 3.2
    bonjour,
    j'ai un probleme assez delicat à resoudre.

    à partir d'une datatable (primefaces 3.2) j'arrive bien a récupérer l'objet correspondant à la ligne que l'on veut editer, mais l'objet récupéré ne tient pas compte des modifs effectuées ds l'input;
    voici le code pour comprendre, beaucoup trop de personnes ont le meme probleme avec le datatable de primefaces:

    la page html:

    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
    <h:form prependId="false" id="form_dataAgenda"> 
    <p:growl id="messages" showDetail="true"/> 
    <p:dataTable id="dataAgenda" var="agd" value="#{agendaController.listAgenda}" editable="true"> 
    <p:ajax event="rowEdit" update=":form_dataAgenda:dataAgenda" listener="#{agendaController.rowEditListener}" /> 
     
     
    <f:facet name="header">Evènements disponibles</f:facet> 
     
    <p:column headerText="TITRE"> 
    <p:cellEditor> 
    <f:facet name="output"> 
    <h:outputText value="#{agd.title}"/> 
    </f:facet> 
    <f:facet name="input"> 
    <p:inputText value="#{agd.title}" /> 
    </f:facet> 
    </p:cellEditor> 
    </p:column> 
    <p:column headerText="COMMENT"> 
    <p:cellEditor> 
    <f:facet name="output"> 
    <h:outputText value="#{agd.comment}"/> 
    </f:facet> 
    <f:facet name="input"> 
    <p:inputText value="#{agd.comment}" /> 
    </f:facet> 
    </p:cellEditor> 
    </p:column> 
    <p:column headerText="OPTIONS" style="width:50px" > 
    <p:rowEditor/> 
    </p:column> 
    </p:dataTable> 
    </h:form>
    le code du managed bean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void rowEditListener(RowEditEvent e){ 
     
     
    Agenda agendaEdited=(Agenda)e.getObject(); 
     
    System.out.println("rowEditor JPA : "+agendaEdited.getId()+" "+agendaEdited.getTitle()+" "+agendaEdited.getComment()); 
     
    }
    merci de me donner une info

  2. #2
    Membre chevronné
    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
    Points : 2 112
    Points
    2 112
    Par défaut
    Salut,

    regarde cet exemple qui marche très bien.
    effectivement, je crois que l'exemple du ShowCase PrimeFaces n'est pas correct.

    Exemple :

    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
     <p:dataTable id="listeTable" value="#{monManagedBean.maListe}" var="item" >
       
    	<p:column>
    		<f:facet name="header">Nom</f:facet>  
    		<h:outputText value="#{item.nom}" />                                   
    	</p:column>   
    
    	<p:column>
    		<f:facet name="header">Position GPS</f:facet>               
    		<p:cellEditor>
    			<f:facet name="output">
    				<h:outputText value="#{item.dernierePosition}" />
    			</f:facet>
    			<f:facet name="input">
    				<p:inputText id="gpsInput"
                                                      value="#{item.dernierePosition}" 
    						  converter="#{coordonneesGpsConverter}" />
    			</f:facet>
    		</p:cellEditor>
    	</p:column>    
    
    	<p:column>
    		<f:facet name="header">Nom</f:facet>  
    		<h:outputText value="#{item.nom}" />                                   
    	</p:column>   
    
    	<p:column>
    		<f:facet name="header">Edition</f:facet>
    		<p:rowEditor />
    	</p:column>
    	
    	<p:ajax event="rowEdit" update="listeTable" listener="#{monManagedBean.saveItem}" />
    	
    </p:dataTable>
    C'est surtout p:ajax, à la fin (en rouge), qu'il faut mettre, et qui n'est pas présenté dans le ShowCase.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Concepteur architecte en informatique
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Concepteur architecte en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    salut,
    si tu regardes bien mon code l'évènement lié à la balise ajax est présent ds la page jsf... juste après le datatable pour evidemment recuperer les evenements liés à la datatable.
    cela ne vient pas de cela puisque j'arrive à bien recuperer mon objet depuis le listener inclut ds cette dernière qui lui meme est appelé depuis l'event rowEdit, mais comme je le dit il n'est pas mis à jour lorsque je rentre ds l'input une nouvelle donnée et que je valide ds le rowEditor.

  4. #4
    Membre chevronné
    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
    Points : 2 112
    Points
    2 112
    Par défaut
    Salut,

    l'exemple que je t'ai donné fonctionne (il est dans l'une de mes applis qui fonctionne), donc inpire-t-en

    par exemple je n'ai pas l'attribut editable="true" sur la dataTable alors que toi oui


    Autre truc dont je crois me souvenir d'impératif (mais je ne suis pas sûr) il faut que ta classe de tes "items" re-définisse correctement equals et hashcode.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Points : 255
    Points
    255
    Par défaut
    Bonjour neo640,

    Que cela donne-t-il si tu remplaces ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DataTable o =  (DataTable) event.getSource();
    Agenda mon_agenda = (Agenda) o.getRowData();
     
    System.out.println("rowEditor JPA : "+agendaEdited.getId()+" "+agendaEdited.getTitle()+" "+agendaEdited.getComment());
    par ton actuelle implémentation ?

    D'après mes recherches, il y avait bien des soucis au niveau de la récupération des données, car l'appel était fait lors de la "Apply Request Values phase" au lieu de la "Invoke Application phase".

    Mais ce problème a été détecté lors de la version 2.2.0 de Primefaces et a été corrigé depuis.

    Pour avoir plus d'indices sur ton problème, pourrais-tu mettre des points d'arrêts dans les setters de tes données, afin de savoir si :
    - ils sont bien appelés
    - ils sont appelées au bon moment

    Il y a au aussi peut-être une autre piste à explorer, c'est l'utilisation du tag "rowkey", normalement utilisé pour les sélections de lignes dans une table.

    Peut-être que son utilisation est plus générique, et pourrais résoudre ton problème.

Discussions similaires

  1. Filter DataTable primefaces
    Par ahmedpa dans le forum JSF
    Réponses: 3
    Dernier message: 08/04/2014, 10h16
  2. PrimeFaces Datatable et RowEditListener
    Par geforce dans le forum JSF
    Réponses: 2
    Dernier message: 17/10/2013, 18h04
  3. datatable primeface vide
    Par nouraty dans le forum JSF
    Réponses: 3
    Dernier message: 18/06/2012, 13h58
  4. Réponses: 1
    Dernier message: 27/10/2011, 19h24
  5. PrimeFaces Datatable et RowEditListener
    Par allstar dans le forum JSF
    Réponses: 2
    Dernier message: 24/10/2011, 17h03

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