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 :

Erreur "java.lang.NullPointerException with <rich:pickList>"


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut Erreur "java.lang.NullPointerException with <rich:pickList>"
    salut tous le monde,

    J'ai encore un problème avec ma <rich:pickList>, j'ai vraiment besoin d'aide.
    en exécutant l'application je reçois un message d'erreur ci-dessous. j'ai débogger l'application et le message s'affiche exactement aprés la méthode selectCompanynamesOption(), l'erreur vient bien de la pickList. j'arrive pas à résoudre le poblème.

    le message d'erreur est le suivant:
    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
    java.lang.NullPointerException
            at com.sun.facelets.util.FastWriter.write(FastWriter.java:77)
            at com.sun.facelets.StateWriter.write(StateWriter.java:116)
            at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.write(HtmlResponseWriter.java:495)
            at org.richfaces.renderkit.PickListRenderer.encodeItem(PickListRenderer.java:194)
            at org.richfaces.renderkit.PickListRenderer.encodeRows(PickListRenderer.java:152)
            at org.richfaces.renderkit.PickListRenderer.encodeSourceRows(PickListRenderer.java:209)
            at org.richfaces.renderkit.html.PickListRendererGen.doEncodeChildren(PickListRendererGen.jav
    a:344)
            at org.richfaces.renderkit.html.PickListRendererGen.doEncodeChildren(PickListRendererGen.jav
    a:258)
            at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)
            at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
            at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
            at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
            at org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRendere
    r.java:79)
            at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
            at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.ja
    va:271)
            at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
            at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
            at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
            at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
            at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
            at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
            at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189)
            at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
            at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
            at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
            at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
            at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.jav
    a:411)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.j
    ava:317)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
            at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
            at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
            at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
            at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
            at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
            at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
            at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493)
            at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
            at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
            at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
            at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
            at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.j
    ava:230)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     
            at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.j
    ava:230)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
            at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:27
    1)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProces
    sorTask.java:637)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorT
    ask.java:568)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTas
    k.java:813)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultRead
    Task.java:341)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
     
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
     
            at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
            at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106
    )
    le backing bean est lesuivant:
    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
    @Stateful
    @Name("adminAction")
    @Scope(ScopeType.SESSION)
    public class AdminActionBean implements AdminActionLocal {
     
    @Out(required=false)
       private List<Customer> companyNames;
     
       @Out(required=false)
       private ArrayList<SelectItem> companyNamesOption;
     
       @In(required=false)
       @Out(required=false)
       private List<Long> customersChoice = new ArrayList<Long>();
     
    public void selectCompanyNames(){
           setCompanyNames((List<Customer>) getEm().createQuery("select c from Customer c")
                        .getResultList());
       }
     
       @Factory("companyNamesOption")
       public void selectCompanyNamesOption(){
     
           selectCompanyNames();
           for (int i=0;i <companyNames.size();i++){
               log.info("customers size =#0",companyNames.size());
               if(companyNamesOption== null)
                   companyNamesOption  = new ArrayList<SelectItem>();
               SelectItem item = new SelectItem(companyNames.get(i).getCustomerId(), companyNames.get(i)
    .getCompanyName(), companyNames.get(i).getCompanyName() );
               companyNamesOption.add(item);
               log.info("customers size2 =#0",customers.size());
           }
       }
    ....
    // getter and setter
    ...
    ma page .xhtml est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <rich:pickList id="customersChoice"  value="#{adminAction.customersChoice}">
                        <f:selectItems  value="#{companyNamesOption}" />
                    </rich:pickList>
    Est ce qu'il y a quelqu'un qui peut m'aider

    grand merci

  2. #2
    sup
    sup est déconnecté
    Membre régulier Avatar de sup
    Profil pro
    Inscrit en
    Août 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 70
    Points : 72
    Points
    72
    Par défaut
    Salut,
    quelle version de richFaces utilises-tu?

    As-tu remarqué qu'il manque le nom de ton backing bean adminAction dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <f:selectItems  value="#{companyNamesOption}" />
    As-tu egalement crée le getter pour cette ArrayList?

    Tu utilises un scope request ou session pour cette page?

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    salut

    J'utilise la version 3.2.1 de richfaces que je l'ai téléchargé il y a une semaine à peut près.

    Oui je voie bien que le nom de mon backing bean n'est pas spécifié. Mais si tu voie bien, la proprieté companyNamesOption;est est outjecté (par l'annotation @Out) dans mon Bean, donc il n'est pas nécessaire de le mettre elle est détecté automatiquement.
    Le getter ainsi que le setter sont bien déclaré dans le bean et dans l'interface locale.
    Le scope est bien déclaré par l'annotation @Scope il est en session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @Stateful
    @Name("adminAction")
    @Scope(ScopeType.SESSION)

  4. #4
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut
    question idiote mais as tu passé un debug ta méthode selectCompanyNamesOption() peux être que le problème vient de là tout simplement.

    Je dis ca car très souvent quand j'ai un NullPointerException c'est que j'ai oublié d'init une list ou un vector

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    oui j'ai passé un debug, en effet dès que le débogage dépasse (autrement dit dès qu'il sort ) de la fonction l'exception se déclanche.
    je suis totalement d'accord avec toi, il me semble aussi que l'erreur est idiote surtout que le message est connu comme tu le dit, mais j'arrive pas à la trouver

  6. #6
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut
    je crois que j'ai trouvé ton erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   companyNamesOption  = new ArrayList<SelectItem>();
    et bien il est dans ta boucle for... donc à chaque boucle tu refais un new pour rien

    il faudrai plutot faire

    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
     
       public void selectCompanyNamesOption(){
     
           companyNamesOption  = new ArrayList<SelectItem>();
     
           selectCompanyNames();
           for (int i=0;i <companyNames.size();i++){
               log.info("customers size =#0",companyNames.size());
               if(companyNamesOption== null)
     
               SelectItem item = new SelectItem(companyNames.get(i).getCustomerId(), companyNames.get(i)
    .getCompanyName(), companyNames.get(i).getCompanyName() );
               companyNamesOption.add(item);
               log.info("customers size2 =#0",customers.size());
           }
       }

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    merci pour la réponce mais rien n'est changé.
    En effet, bien que le new est à l'intérieur de la boucle for, elle est exécuter qu'une seule fois car: à la première itération la condition if est vérifié (la proprieté est bien null) donc il entre la dedans. mais à la seconde elle ne l'ai plus puisque on a fait un add aprés, donc elle n'est plus valide et par conséquent le compilateur la dépasse.

    merci comme même pour ton essai.

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    j'ai trouvé une erreur. j'ai pas fait de converter. je vous transmet le nouveau code de la balise de la page .xhtml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <rich:pickList id="customersChoice"  value="#{adminAction.customersChoice}" converter="javax.faces.Long">
                        <f:selectItems  value="#{companyNamesOption}" />
                    </rich:pickList>
    et pourtant, toujours la même erreur NullPointerException

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Peux tu nous dire que vaut companyNames.size()

    Tu peux aussi, pour tester, initialiser tes conteneurs (comme companyNamesOption) en dehors de tes methodes et de tester sur companyNamesOption.size()==0 au lieu de companyNamesOption==null.

    Tous tes conteneurs etant surs d'etre initialisés, le comportement de ton appli pourra te donner une piste sur le pourquoi ça deconne.

    T'aurai pas un converter de classe qui renverrai null ??

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    t'as parfaitement raison Breezy. Il y a pas mal de changement.
    Pour répondre à tes questions d'abord, CompanyNames est de taille 4, ainsi que CompanyNamesOption biensûre aprés la fin de la boucle For.
    Ce qui est étonnant maintenant, c'est que si j'initialise CompanyNamesOption à sa déclaration, et comme tu le dit je vérifie si sa taille==0 donc j'initialise; dans ses cas j'ai pas d'erreurNullPointerException, l'application s'exécute parfaitement. Mais, j'ai rien dans la PickList, elle est complétement vide. c étonnant. J'ai fait un déboggage pour voir ce que ça donne: j'ai fait deux breakPoint à l'intérieur de la méthode selectCompanynamesOption() mais le compilateur finie l'exécution sans entrer la dedans. Donc finalement, c normale que la liste soit vide.
    La question maintenant pourquoi il n'entre pas la dedans alors que tous a l'heur (avec initialisation de ==null) il entre bien et même la List<Selectitem>companyNamesOption posséde les bonnes valeurs.

    C'est ce que je vais essayer de le découvrir maintenant.

    merci beaucoup, tu m'a bien aider.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par D.Bilel Voir le message
    merci beaucoup, tu m'a bien aider.
    Content d'avoir pu te rendre service

  12. #12
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    j'ai trouver la solution . c'est tous con, malheureusement m'a pris trois jours.
    en Effet le constructeur de selectitem déclanche une nullPointerException Si soit l'bjet retourné, soit le label, soit la description est null. et bah oui dans ma base c'est pas tous les champs qui sont rempli, et un des enregistrement comprend le Companyname qui est null. c'est la rasion pour la quelle qu'il envoie un nullPointerException.

    merci a tous qui m'ont aidé
    enfin

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/05/2011, 10h40
  2. Réponses: 2
    Dernier message: 09/09/2008, 22h07
  3. erreur compilation java.lang.NullPointerException
    Par muslim1987 dans le forum JDBC
    Réponses: 6
    Dernier message: 26/06/2008, 09h16
  4. Erreur exception java.lang.NullPointerException
    Par geol99 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2007, 20h24
  5. erreur de java.lang.NullPointerException
    Par vince351 dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2007, 12h29

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