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

Hibernate Java Discussion :

NullPointerException (erreur due à la conversion)


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    éléve ingénieur
    Inscrit en
    Mai 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : éléve ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 75
    Par défaut NullPointerException (erreur due à la conversion)
    Bonjour tout le monde

    Mon histoire avec cette erreur ne va pas finir , j'ai essayé de trouverla cause du problème mais en vain , est ce qu'il y a quelqu’un qui va detecter l'erreur ? c'est la question que je pose chaque minute .


    voici l'erreur :

    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
     
     
    java.lang.NullPointerException
    	at Convert.TestConverter.getAsObject(TestConverter.java:89)
    	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:171)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:202)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:319)
    	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
    	at javax.faces.component.UIInput.validate(UIInput.java:960)
    	at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
    	at javax.faces.component.UIInput.processValidators(UIInput.java:698)
    	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    	at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
    	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    	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:593)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:662)


    la classe TestConverter

    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
     
    @ManagedBean
    @RequestScoped
    public  class TestConverter  implements  Converter{
     
     
         AgenceDAO agencedao = new AgenceDAO() ; 
     
     
     
       @Override
            public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
                if (object == null) {
                    return null;
                }
                if (object instanceof Agence) {
                   Agence a  = (Agence) object;
                    return getStringKey(a.getNumAgence());
                } else {
                    Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "object {0} is of type {1}; expected type: {2}", new Object[]{object, object.getClass().getName(), Agence.class.getName()});
                    return null;
                }
            }
     
     
       @Override
            public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
                if (value == null || value.length() == 0) {
                    return null;
                }
                try {
                    agencedao = (AgenceDAO) facesContext.getApplication().getELResolver().
                            getValue(facesContext.getELContext(), null, "agenceDAO");
                    return agencedao.getAgenceByNum(getKey(value));   
                } catch (NumberFormatException e) {
                    throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid theme."));
                }
            }
     
     
     
       java.lang.Integer getKey(String value) {
                java.lang.Integer key;
                key = Integer.valueOf(value);
                return key;
            }
     
           String getStringKey(java.lang.Integer value) {
                StringBuilder sb = new StringBuilder();
                sb.append(value);
                return sb.toString();
            }

    la méthode getAgenceByNum :

    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
     
     
         public Agence getAgenceByNum (Integer numA ){
     
             Session s = null;
             Agence a = null ; 
             Transaction tx = null;
     
            try{
                 s = HibernateUtil.getSessionFactory().openSession();
     
                 a = (Agence) s.get(Agence.class, numA);
     
     
     
            }catch(Exception e){
                if (tx!=null) tx.rollback();
               e.printStackTrace();  
            }finally {
       s.close();
    }
            return a;
        }


    la vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <h:outputText value="Agence"/>
         <h:selectOneMenu    id="SA" value="#{showA.agence}"   style="width:200px"  converter="#{ConvertAgence}"> 
             <f:selectItem itemLabel="--sélectionner une agence--" noSelectionOption="true" />
             <f:selectItems value="#{showA.agences}" var ="ag"  itemValue="#{ag}" itemLabel="#{ag.nomAgence}"/>   
     
                     </h:selectOneMenu>

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    peux-tu nous montrer la ligne: 89
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at Convert.TestConverter.getAsObject(TestConverter.java:89)
    Eric

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par belhoussaine Voir le message
    Bonjour tout le monde

    Mon histoire avec cette erreur ne va pas finir , j'ai essayé de trouverla cause du problème mais en vain , est ce qu'il y a quelqu’un qui va detecter l'erreur ?
    TestConverter, méthode getAsObject(), ligne 89. Tu appelle une méthode ou une propriété sur un objet null. Si je devais deviner sans les numéros de ligne, je dirais que c'est agenceDAO qui est null

  4. #4
    Membre confirmé
    Homme Profil pro
    éléve ingénieur
    Inscrit en
    Mai 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : éléve ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 75
    Par défaut
    Salut les jeunes


    voici la ligne 89 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return agencedao.getAgenceByNum(getKey(value));


    ===========================================================

    et la c'est la ligne dont je fais de l'injection
    AgenceDAO agencedao = new AgenceDAO() ;

  5. #5
    Membre chevronné
    Avatar de Jacques Beauregard
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2015
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 231
    Par défaut
    Hello,

    Je suppose que dans ton constructeur par défaut de la classe AgenceDAO, tu set un "AgenceByNum".
    Sinon l'erreur est évidente.
    Il ne faut jamais prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont...

    Le guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Jacques Beauregard Voir le message
    Hello,

    Je suppose que dans ton constructeur par défaut de la classe AgenceDAO, tu set un "AgenceByNum".
    Sinon l'erreur est évidente.
    Ca ne lancera pas d'exception à cette ligne là si getAgenceByNum() retourn null, donc ce n'est pas le problème.

    Comme dit, le dao est null, et c'est ça le problème. Après vu la manière dont le dao est récupéré, ou tu du mois la tentative de récupération, difficile d'en dire plus. Visiblement il n'y a pas d'objets de ce nom là dans le contexte EL.

    déjà l'appel devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getVariableMapper().resolveVariable("agenceDAO").getValue(elcontext)
    , ensuite je ne vois pas pourquoi tu te tire la nouille avec un code si compliqué plutot que d'injecter ton dao dans ton converter:

    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
    @ManagedBean
    @RequestScoped
    public  class TestConverter  implements  Converter{
     
         @Inject 
         AgenceDAO agencedao ;
     
    //...
     
       @Override
            public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
                if (value == null || value.length() == 0) {
                    return null;
                }
                try {
                    return agencedao.getAgenceByNum(getKey(value));   
                } catch (NumberFormatException e) {
                    throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid theme."));
                }
            }

  7. #7
    Membre confirmé
    Homme Profil pro
    éléve ingénieur
    Inscrit en
    Mai 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : éléve ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 75
    Par défaut
    Salut

    Est ce qu'il y a un autre moyen que celui la de la conversion par ce que j'ai pas beaucoup d'experience sur l'injection , conversion . machin , par exemple si je veux récuperer le numAgence dans le select one menu comme ceci et l'inserer dans la base de don, c'est possible ? si oui que dois je faire encore à part ce code , sinon si vous avez une solution n'hésitez pas à me l'annoncer et merci .

    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
     
     
    <h:outputText value="Agence"/>
         <h:selectOneMenu    id="SA" value="#{showA.agence.numAgence}"   style="width:200px"  converter="#{ConvertAgence}"> 
             <f:selectItem itemLabel="--sélectionner une agence--" itemDisabled="true" />
             <f:selectItems value="#{showA.agences}" var ="ag"  itemValue="#{ag.NumAgence}" itemLabel="#{ag.nomAgence}"/>   
     
                     </h:selectOneMenu>
     
     <h:outputText value="Nom"/>
                    <h:inputText label="nom" id="nom" value="#{show.p.nomPersonnel}">
     
                    </h:inputText>
     
                    <h:outputText value="Prenom:" />
                    <h:inputText label="prenom" id="prenom"  value="#{show.p.prenom}">
     
                    </h:inputText>
     
     <f:facet name="footer">
                        <h:commandButton value="Ajouter" onclick="myFunction()" action="#{show.insert()}" execute="popup" />
                    </f:facet>

    la méthode inserer
    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
     
     
     public String  insert () {
     
             personnelDAO dao = new personnelDAO() ;
             String msg ; 
     
             if(dao.create(p)){
                 msg="personnel enregistré correctement";
                 FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, null);
                 FacesContext.getCurrentInstance().addMessage(null, message); 
             }else {
     
                 msg="L'enregistrement a echoué";
                 FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, null);
                 FacesContext.getCurrentInstance().addMessage(null, message); 
             }
     
             return "succes" ;
     
        }

    la methode create

    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
     
     
       /* Ajouter un personnel */
        public boolean create(Personnel p){
            boolean flag ; 
            Session s = HibernateUtil.getSessionFactory().getCurrentSession();    
            try{
                s.beginTransaction();      
                s.save(p);
                s.getTransaction().commit();
                flag= true;
            }catch(Exception e){
                flag= false;
                s.getTransaction().rollback();
            }
            return flag;
        }

    la class personnel

    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
     
     
    @Entity
    @Table(name="personnel"
        ,catalog="derichebourg"
    )
    public class Personnel  implements java.io.Serializable {
     
     
         private String cin;
         private Statut statut;
         private Agence agence;
         private String nomPersonnel;
         private String prenom;
         private String numTelephone;
         private String adresse;
         private String fonction;
         private String login;
         private String motDePasse;
         private String mail;
         private Set<Conducteur> conducteurs = new HashSet<Conducteur>(0);
         private Set<Responsableconducteur> responsableconducteurs = new HashSet<Responsableconducteur>(0);
     
        public Personnel() {
        }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/12/2007, 17h38
  2. Réponses: 3
    Dernier message: 30/10/2007, 13h38
  3. Réponses: 1
    Dernier message: 04/10/2006, 09h01
  4. Erreur lors de conversion de champ d'une table
    Par vitalogy dans le forum Access
    Réponses: 3
    Dernier message: 15/09/2005, 10h36
  5. Réponses: 2
    Dernier message: 10/11/2004, 12h21

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