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 :

Probleme raffraichissement datatable


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut Probleme raffraichissement datatable
    Bonjour

    Je sais que le sujet est traité et retraité mais je trouve pas la solution.

    J'ai un dataTable qui m'affiche un id, un nom, un prenom, un email.

    J'affiche ma table membre dans mon datatable. En dessous j'ai un panelgrid qui fonctionne et qui me permet d'ajouter des membres dans ma BD:

    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
     
    <h:form rendered="#{memberController.show}" style="margin-top:20px" styleClass="toto">
    <h:outputText value="Ajouter un membre :" styleClass="titleComposant"/>
        <rich:panel>
                                <h:panelGrid style="margin-top:10px" id="panelAjout">
                                    <h:outputText value="Nom: " style="color:gray"/>
                                    <rich:inplaceInput defaultLabel="cliquer et entrer nom" value="#{memberController.member.nom}"/>
                                    <h:outputText value="Prénom:" style="color:gray"/>
                                    <rich:inplaceInput defaultLabel="cliquer et entrer prénom" value="#{memberController.member.prenom}"/>
                                    <h:outputText value="Téléphone:" style="color:gray"/>
                                    <rich:inplaceInput defaultLabel="cliquer et entrer numero" value="#{memberController.member.phone}"/>
                                    <h:outputText value="Licence:" style="color:gray"/>
                                    <rich:inplaceInput defaultLabel="cliquer et entrer licence" value="#{memberController.member.licence}"/>
                                    <h:outputText value="Email:" style="color:gray"/>
                                    <rich:inplaceInput defaultLabel="cliquer et entrer email" value="#{memberController.member.email}"/>
                                    <h:outputText value="Type:" style="color:gray"/>
                                    <rich:inplaceInput defaultLabel="Enter admin ou typeUser" value="#{memberController.member.type}"/>
                                </h:panelGrid>
     
                                    <a4j:commandButton value="Ajouter" action="#{memberController.ajouter}" reRender="dataTable">
        </a4j:commandButton>                            
     </rich:panel>
     
    </h:form>
    Le souci est que lorsque je clique sur le commandButton et qu'il ajoute un membre ds ma BD, il ne me raffraichis pas mon datatable. Mon datataTable à comme id="dataTable"

    Voyez vous une erreur

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Ta méthode ajouter() dans memberController met bien à jour le dataModel (ou la liste) de ton tableau?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Merci de ton aide

    Les modifications se font correctement ds ma BD. Pour l'insert, je n'utilise pas de List ou de datamodel. J'utilise simplement mon instance de classe Member en parametre d'entré de ma classe DAO qui fait un save vers ma BD.

    je te mets le code si tu vois une possible erreur qui expliquerai le faite qu'il n'y a pas de raffraichissement:

    ma methode ajouter():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void ajouter() {
      daoMember.insertMember(member);
    }
    ma methode DAO:
    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
     
    public Member insertMember(Member memb) {
            try {
                Session session = HibernateUtil.getSession();
                Transaction tx = session.beginTransaction();
                getSession().save(memb);
                tx.commit();
                log.debug("Sauvegarde effectuée");
            } finally {
                try {
                    HibernateUtil.closeSession();
                } catch (HibernateException e1) {
                    e1.printStackTrace();
                }
            }
            return memb;
        }
    Je n'arrive donc pas à raffraichir mon datatable lorsque j'ajoute un member

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Ne met pas de condition sur le form, plutôt sur le panel, et inclus la dataTable dans le même form.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Je n'ai pas compris à quoi ton dataTable est bindé.

    Vérifies que ton DAO renvoie bien une requête après l'insertion.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Merci pour votre aide

    Je n'ai pas compris (je n'en vois pas) :
    "Ne met pas de condition sur le form"

    Sinon j'ai tout insérer dans le même form mais pr l'instant cela ne marche pas.

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par raimus88 Voir le message
    Merci pour votre aide

    Je n'ai pas compris (je n'en vois pas) :
    "Ne met pas de condition sur le form"

    Sinon j'ai tout insérer dans le même form mais pr l'instant cela ne marche pas.
    le rendered sur le form, il vaut mieux le faire pour l'outpuPanel,
    donne nous le code de la dataTable, je suppose que ton code de modification fonctionne bien.. tu peux regarder en debug si l'objet a bien été inséré dans la liste.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Voici mon tout mon code :

    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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    <?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:ui="http://java.sun.com/jsf/facelets"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:a4j="http://richfaces.org/a4j"
    	xmlns:rich="http://richfaces.org/rich">
     
        <head>
            <meta http-equiv="pragma" content="no-cache"/>
            <meta http-equiv="expires" content="-1"/>
            <style type="text/css">
                .row1 {
                    background-color: #EDEBEB;
                    font-size: 10px;
                }
                .row2 {
                    background-color: #ffffff;
                    font-size: 10px;
                }
                .inplace{
                border: none;
            }
            .hover {
                color: #{a4jSkin.generalTextColor};
                background-color :#{a4jSkin.tipBorderColor};
            }
            </style>
        </head>
     
    <ui:composition template="/template.xhtml">
        <ui:define name="content">
            <f:view>
                <h:form rendered="#{memberController.show}" id="validate">
                    <h:outputText value="Tableau des membres du club :" styleClass="titleComposant"/>
                        <rich:simpleTogglePanel switchType="client" label="Membres du club" rendered="true">
                            <rich:dataTable value="#{memberController.memberList}" var="varMembre"
                                            rowClasses="row1, row2" id="dataTable" rows="7" width="100%">
                                <f:facet name="header">
                                    <rich:columnGroup>
                                        <rich:column colspan="8"><h:outputText value="Clients trouvés : #{memberController.taille}" /></rich:column>
                                        <rich:column breakBefore="true"><f:verbatim>Member Id</f:verbatim></rich:column>
                                        <rich:column><f:verbatim>Nom</f:verbatim></rich:column>
                                        <rich:column><f:verbatim>Prénom</f:verbatim></rich:column>
                                        <rich:column><f:verbatim>Phone</f:verbatim></rich:column>
                                        <rich:column><f:verbatim>Email</f:verbatim></rich:column>
                                        <rich:column><f:verbatim>Licence</f:verbatim></rich:column>
                                        <rich:column><f:verbatim>Password</f:verbatim></rich:column>
                                        <rich:column><f:verbatim>Supprimer</f:verbatim></rich:column>
                                    </rich:columnGroup>
                                </f:facet>
     
                                <rich:column sortBy="#{varMembre.id}"><h:outputText value="#{varMembre.id}"/></rich:column>
                                <rich:column filterEvent="onkeyup" filterBy="#{varMembre.nom}"><h:outputText value="#{varMembre.nom}"/></rich:column>
                                <rich:column><h:outputText value="#{varMembre.prenom}"/></rich:column>
                                <rich:column filterEvent="onkeyup" filterBy="#{varMembre.phone}"><h:outputText value="#{varMembre.phone}"/></rich:column>
                                <rich:column><h:outputText value="#{varMembre.email}"/></rich:column>
                                <rich:column><h:outputText value="#{varMembre.licence}"/></rich:column>
                                <rich:column><h:outputText value="#{varMembre.password}"/></rich:column>
                                <rich:column>
                                    <h:column>
                                        <a4j:commandButton value="ok" reRender="dataTable" action="#{memberController.deleteMember}">
                                            <f:setPropertyActionListener value="#{varMembre}" target="#{memberController.member}" />
                                        </a4j:commandButton>
                                    </h:column>
                                </rich:column>
                            </rich:dataTable>
                            <rich:datascroller align="center" for="dataTable" maxPages="20" renderIfSinglePage="false"/>
                        </rich:simpleTogglePanel>
     
                        <rich:panel styleClass="compAjout" style="margin-top:20px">
                            <h:outputText value="Ajouter un membre :" styleClass="titleComposant" style="margin-top:0px"/>
                            <f:facet name="header"><h:outputText value="Information personne"/></f:facet>
                            <h:panelGrid style="margin-top:10px" id="panelAjout" columns="2">
                                <h:outputText value="Nom: " style="color:black"/>
                                <h:inputText value="#{memberController.member.nom}"/>
     
                                <h:outputText value="Prénom:" style="color:black"/>
                                <h:inputText value="#{memberController.member.prenom}"/>
     
                                <h:outputText value="Téléphone:" style="color:black"/>
                                <h:inputText value="#{memberController.member.phone}"  id="Telephone">
                                    <f:validateLength minimum="8" maximum="13"/>
                                    <f:convertNumber type="number" integerOnly="true"/>
                                </h:inputText>
     
                                <h:outputText value="Licence:" style="color:black"/>
                                <h:inputText value="#{memberController.member.licence}" id="Licence">
                                    <f:validateLength minimum="6" maximum="6"/>
                                </h:inputText>
     
                                <h:outputText value="Email:" style="color:black"/>
                                <h:inputText value="#{memberController.member.email}"/>
     
                                <h:outputText value="Type:" style="color:black"/>
                                <h:inputText value="#{memberController.member.type}"/>
     
                                <h:outputText value="Password:" style="color:black"/>
                                <h:inputText value="#{memberController.member.password}" id="Password">
                                    <f:validateLength minimum="10" maximum="10"/>
                                </h:inputText>
     
                                <a4j:commandButton value="Ajouter" reRender="dataTable" action="#{memberController.ajouter}"></a4j:commandButton>
                                <!-- <a4j:jsFunction name="submit" action="#{memberController.ajouter}"/>-->
                                <!--<a4j:support event="oncomplete" reRender="dataTable"/> -->
                            </h:panelGrid>
                        </rich:panel>
     
                        <rich:panel>
                            <f:facet name="header"><h:outputText value="Résultats de la validation des donnée :"></h:outputText></f:facet>
                            <rich:messages style="color:red" for="Telephone"/>
                            <rich:messages style="color:red" for="Licence"/>
                            <rich:messages style="color:red" for="Password"/>
                        </rich:panel>
     
     
                        <!--<rich:modalPanel id="confirmationDelete" width="250" height="120">
                           <f:facet name="header">Confirmation</f:facet>
                           <h:panelGrid>
                              <h:panelGrid columns="2">
                                 <h:graphicImage value="/images/danger.gif" />
                                 <h:outputText value="Etes vous sur de supprimer?" style="FONT-SIZE: large;" />
                              </h:panelGrid>
                              <h:panelGroup>
                                 <input type="button" value="OK"
                                  onclick="#{rich:component('confirmationDelete')}.hide();submit();return false" />
                                 <input type="button" value="Cancel"
                                  onclick="#{rich:component('confirmationDelete')}.hide();return false" />
                              </h:panelGroup>
                           </h:panelGrid>
                        </rich:modalPanel>-->
     
                </h:form>
            </f:view>
         </ui:define>
     
        <!--LOGIN PARTIE-->
        <ui:define name="loginInsert">
            <ui:include src="login.xhtml"/>
        </ui:define>
    </ui:composition>
    </html>

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Et ta méthode getMemberList() stp

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public ArrayList getMemberList() {
            if (memberList == null) {
                memberList = new ArrayList(daoMember.initQuery());
            }
            return memberList;
        }
    Supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void deleteMember() {
            daoMember.deleteQuery(member);
            memberList=null;
        }

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Tu dois avoir un problème dans la fonction de modification, pour être sur que ce n'est pas un problème de rafraichissement ajax, fais un F5, pour mettre à jour manuellement la page.

    à quoi sert:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:form rendered="#{memberController.show}"  ..>
    Il vaut mieux le faire dans le panel pas dans le form..

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Pui j'avais essayé de faire f5 ou de vider le cache manuellement mais sans succé.

    Le rendered sert juste pour mon authentification au départ, qu'il ne soit pas visible.
    Je viens de le changer de cette maniére :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <h:form id="validate">
    <a4j:outputPanel rendered="#{memberController.show}">
    ......
    </aj4:outputPanel>
    </h:form>

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Tu dois forcer memberList à null dans ta méthode ajouter() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void ajouter() {
      daoMember.insertMember(member);
      memberList=null;
    }
    Sinon ton DAO ne va pas renvoyer une requête après l'insertion.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Oui je l'avais fait.

    J'ai juste oublié de le mettre au debut de mon post....

    La reque^te se fait bien vu que l'insertion dans ma BD se fait correctement. C'est vraiment un souci de raffraichissement au niveau jsf ou au niveau de ma List que j'arrive pas à débugger.

    Je vois que 2 problémes :

    * ou j'ai mal construit mes balises jsf qui bloque le raffraichissement
    * Ou il ne s'ajoute pas vraiment dans mon arraylist

    Pourtant j'ai l'impression que les 2 sont correct

  15. #15
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par raimus88 Voir le message

    * Ou il ne s'ajoute pas vraiment dans mon arraylist
    Je dirais plus ça, mais, tu peux le vérifier, ajoute un point d'arret sur le get et tu verra..regarde si en base tu as bien l'objet inséré, et que tu le recupere dans la liste..

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Dans tous les cas, je pense que je suis pas loin de trouver, ca doit etre encore une petite erreur idiote.

    Est ce que je peux me permettre pour vous poser un autre problème

    Lorsque j'appuie de nombreuses fois sur supprimer une ligne active, au bout de 3 ou 4 fois, j'obtiens cette heure que je n'avais pas vu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session
    J'ai fait un peu de recherches et apparement ca viendrai peut etre de ceci :
    http://www.developpez.net/forums/d47...ue-prob-cache/

    Mais je vois pas comment régler le souci qd meme. Est il possible d'avoir votre avis dessus.

    Merci encore et sorry pr toutes les questions

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Vérifies ta liste alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ArrayList getMemberList() {
            if (memberList == null) {
                memberList = new ArrayList(daoMember.initQuery());
                for(Member eachMember : memberList ){
                    System.out.println(eachMember.nom);
                }
            }
            return memberList;
        }

  18. #18
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Par défaut
    ajoute un booléen dans ton code par exemple newInsert
    dans le code de la méthode ajout tu ajoutes
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    setNewInsert(true);
    et puis dans le getTaListe tu mets
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    if(taListe==null || isNewInsert())
    et à la fin de la méthode tu mets
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    setNewInsert(false)

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Je vois que tu as résolu le problème.

    Comment as-tu fait?

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    J'ai un peu honte de le dire mais je me suis rendu compte que j'avais mis à null une mauvaise liste qui a casiment le même nom que ma list.

    "memberLists" au lieu de "memberList"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void ajouter() {
            daoMember.insertMember(member);
            memberList=null;
        }
    Désolé pour la perte de temps
    Et merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme avec datatable
    Par lakhdharani dans le forum JSF
    Réponses: 6
    Dernier message: 17/02/2009, 16h04
  2. Probleme avec datatable
    Par nt_amine dans le forum JSF
    Réponses: 4
    Dernier message: 03/12/2008, 09h59
  3. probleme avec datatable
    Par oussamus dans le forum Seam
    Réponses: 0
    Dernier message: 01/12/2008, 14h49
  4. Probleme avec datatable imbriqués
    Par tomy29 dans le forum JSF
    Réponses: 2
    Dernier message: 14/08/2008, 11h29
  5. Probleme raffraichissement d'une form
    Par Contrec dans le forum C#
    Réponses: 12
    Dernier message: 17/12/2007, 09h16

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