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 :

impossible de supprimer avec hibernate + JSF


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut impossible de supprimer avec hibernate + JSF
    Bonjour,
    Voilà je travaille sur un projet hibernate, jsf 2.0 le tout sous netbeans 6.8.
    J'aimerais supprimer un enregistrement de ma table et mon code ne fonctionne pas et je ne comprends pas pourquoi.

    Les enregistrements de ma table sont stockées dans une data table dans ma page jsf.

    Voici ce que j'ai pu faire pour supprimer :

    la classe Authentification.java :
    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
    public class Authentification  implements java.io.Serializable {
     
     
         private int idauth;
         private String loginauth;
         private String passauth;
     
        public Authentification() {
     
        }
     
     
        public Authentification(int idauth) {
            this.idauth = idauth;
        }
        public Authentification(int idauth, String loginauth, String passauth) {
           this.idauth = idauth;
           this.loginauth = loginauth;
           this.passauth = passauth;
        }
     
    /*@Id
    @GeneratedValue*/
        public int getIdauth() {
            return this.idauth;
        }
     
        public void setIdauth(int idauth) {
            this.idauth = idauth;
        }
        public String getLoginauth() {
            return this.loginauth;
        }
     
        public void setLoginauth(String loginauth) {
            this.loginauth = loginauth;
        }
        public String getPassauth() {
            return this.passauth;
        }
     
        public void setPassauth(String passauth) {
            this.passauth = passauth;
        }
     
        public String clear(){
                        idauth=0;
                        loginauth="";
                        passauth="";
                        return "clear";
                    }
     
     
    }
    -----------------------------------------------------------------------
    Ma fonction de supression dans ma classe AuthHelper :

    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 delete(){
            Authentification authentif = new Authentification();
            if (authentif != null){
                int id = authentif.getIdauth();
                org.hibernate.Transaction tx =session.beginTransaction();
                Query query = session.createQuery ("delete from Authentification as a where"+"a.idauth=:id");
                query.setInteger("id", id);
                int rowCount = query.executeUpdate();
                tx.commit();
                System.out.println("Rows affected :"+rowCount);
                authentif.clear();
                getAuthentication(); // La fonction qui affiche les enregistrements de la table
            }
        }
    --------------------------------------------------------------------------
    mon managed bean : AuthBean
    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
    package Authentif;
     
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import java.util.List;
     
    public class AuthBean {
     
        AuthHelper helper= new AuthHelper();;
        private Authentification auth= new Authentification();
        List<Authentification> authList;
     
        public AuthBean() {
     
        }
     
    public Authentification getAuth(){return auth;}
        public void setAuth(Authentification auth){this.auth=auth;}
     
    public String deleteAuth() {
    authentication.getRowData();
    	helper.delete();
    	return "index";
    }
    -------------------------------------------------------------------------
    Ma page 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <h:body>
    <h:form>
                <h:dataTable value="#{AuthBean.getAuthen()}" var="item" border="0" cellpadding="2" cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px">
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="idauth"/>
                            </f:facet>
                            <h:outputText value="#{item.idauth}"/>
                        </h:column>
     
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="login"/>
                            </f:facet>
                            <h:outputText value="#{item.loginauth}"/>
                        </h:column>
     
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="mot de passe"/>
                            </f:facet>
                            <h:outputText value="#{item.passauth}"/>
                        </h:column>
     
                    <h:column>
                            <f:facet name="header">
                                <h:outputText value=" "/>
                            </f:facet>
                            <h:commandButton action="#{AuthBean.UpdateAuth}" value="Modifer"/>
     
                        </h:column>
     
                    <h:column>
                            <f:facet name="header">
                                <h:outputText value=" "/>
                            </f:facet>
                            <h:commandButton action="#{AuthBean.deleteAuth}" value="Supprimer"/>
     
                        </h:column>
    </h:dataTable>
     
                    <br/>
     
                    <h:commandLink action="#{AuthBean.NextPage}" value="next"/>
                </h:form>
        </h:body>
    -------------------------------------------------------------------------
    Je vous serait très reconnaissante de toute l'aide apportée.

  2. #2
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Voilà j'ai oublié de mentionner l'erreur qui me parait :

    java.lang.IllegalArgumentException: node to traverse cannot be null!
    ---------------------------------------------------------------------------

    javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: node to traverse cannot be null!
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIData.broadcast(UIData.java:912)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.IllegalArgumentException: node to traverse cannot be null!
    at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:31)
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:254)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
    at $Proxy111.createQuery(Unknown Source)
    at Authentif.AuthHelper.delete(AuthHelper.java:58)
    at Authentif.AuthBean.deleteAuth(AuthBean.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    ... 33 more

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu as une erreur dans ta requête, il manque un blanc entre where et a.idauth
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session.createQuery ("delete from Authentification as a where " + "a.idauth=:id");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Comment ça un blanc je n'ai pas compris.
    Je m'excuse mais pourriez vous m'expliquer d'avantage svp? merci

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Voilà le code que tu as fourni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    session.createQuery ("delete from Authentification as a where"+"a.idauth=:id");
    ...
    Ce qui induit une requête exécutée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "delete from Authentification as a wherea.idauth=:id"
    Il manque un blanc entre where et a.idauth, ce qui va provoquer une erreur à l'exécution de la requête.
    (C'est plus clair ?)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    oui oui merci bcp. Je n'ai pas fait attention.
    Mais pour data table de ma page jsf me faudra-t-il un astuce pour récupérer la ligne active de la data table ou bien cela se fait automatiquement?

  7. #7
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Que quelqu'un m'aide svp j'aimerais savoir les étapes de suppression d'une ligne de data table merci

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Regarde ceci...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    oui mais bon ma fonction hibernate qui fait la suppression en fait ne le fait pas. J'ai fait un petit test la dessus et ça ne marche pas. Je sais pas vraiment où est le problème.
    merci

  10. #10
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    donc déjà le problème est dans ma classe AuthHelper avant même de passer à ma page JSF et mon managedBean

  11. #11
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Bonjour,

    Merci pr votre aide j'ai réussi à dépasser mon problème de suppression d'une ligne de ma dataTable en faisant ceci :

    AuthHelper.java :

    public void deleteQuery(Authentification authentif) {
    try {
    org.hibernate.Transaction tx =session.beginTransaction();
    session.delete(authentif);
    tx.commit();
    //System.out.println("Delete successfully!");
    getAuthentication();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    --------------------------------------------------------------------------
    AuthBean.java

    public String deleteAuth() {
    Authentification authen = (Authentification) authentication.getRowData();
    helper.deleteQuery(authen);
    //authentication.setWrappedData(helper.getAuthentication());
    return "index";
    }
    --------------------------------------------------------------------------

    Tout comme, dans ma page jsf, j'ai donné un id à mon commandButton dans ma dataTAble :

    <h:column>
    <f:facet name="header">
    <h:outputText value=" "/>
    </f:facet>
    <h:commandButton id ="authentication" action="#{AuthBean.deleteAuth}" value="Supprimer"/>

    </h:column>

    --------------------------------------------------------------------------

    Le seul soucis que j'ai maintenant est que la suppression se fait au niveau de ma base de données et non pas au niveau de mon bean. Ma dataTable conserve encore mes enregistrements supprimés.

    Que dois je faire sachant que j'ai une fonction recreateModel() dans mon manageed bean qui fait ceci :
    --------------------------------------------------------------------------
    void recreateModel() {
    authentication = null;
    } //authentication est de type DataModel

    --------------------------------------------------------------------------

    Je l'ai appelé dans ma fonction deleteAuth() de mon maanged bean mais sans résultat :

    public String deleteAuth() {
    Authentification authen = (Authentification) authentication.getRowData();
    helper.deleteQuery(authen);
    //authentication.setWrappedData(helper.getAuthentication());
    recreateModel();
    return "index";
    }

    --------------------------------------------------------------------------

    SVP aidez moi à règler ce problème. Je l'ai aussi au niveau de l'insert dans ma dataTable.

    Merci d'avance.

  12. #12
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Heeeeeeeeeeeeeelllllpppppppppppppppppppppp svp que quelqu'un m'aide

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

Discussions similaires

  1. Pb avec Hibernate : impossible de persister mon entité
    Par Atatorus dans le forum GWT et Vaadin
    Réponses: 5
    Dernier message: 17/02/2009, 23h39
  2. impossible de supprimer avec removeMovieClip
    Par starr dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 10/11/2008, 22h20
  3. pb d'utilisation JBoss avec richFaces + JSF + Hibernate
    Par psycho_xn dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 06/11/2008, 22h54
  4. intégration de jsf avec hibernate
    Par delivrance84 dans le forum JSF
    Réponses: 1
    Dernier message: 20/07/2008, 21h23
  5. Connexion à la base impossible avec hibernate
    Par jason69 dans le forum Hibernate
    Réponses: 3
    Dernier message: 29/06/2007, 14h23

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