Erreur java.lang.NullPointerException
Je suis en utilisant JSF/primefaces
J'ai une erreur qui est étrange ,dans la mesure où je suis l'appel de la même methode a partir d'un autre formulaire et fonctionne très bien mais à partir de ce formulaire génère une erreur!
<h:form id="f7">
<p:panel visible="#{TestAjax.form7Visible}" style="width: 800px;">
<h:panelGrid id="panForm7" columns="1">
<h:selectManyListbox value="#{TestAjax.selectedProjects}" id="project7" size="3">
<f:selectItem itemLabel="-- Select Projects -- " itemValue="0"/>
<f:selectItems value="#{TestAjax.getMyListProject()}" />
</h:selectManyListbox>
<h:selectOneMenu id="chartTypeCh" value="#{TestAjax.chartType}">
<f:selectItem itemValue="PieChart" itemLabel="PieChart"/>
<f:selectItem itemValue="BarChart" itemLabel="BarChart"/>
<f:selectItem itemValue="Table" itemLabel="Table"/>
</h:selectOneMenu>
FROM:<p:calendar value="#{TestAjax.date1}" showOn="button" />
TO :<p:calendar value="#{TestAjax.date2}" showOn="button" />
<p:commandButton ajax="false" action="#{TestAjax.fillReport2()}" value="OK"></p:commandButton>
</h:panelGrid>
</p:panel>
</h:form>
l'erreur est:
ATTENTION: #{TestAjax.fillReport2()}: java.lang.NullPointerException
javax.faces.FacesException: #{TestAjax.fillReport2()}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
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:409)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
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 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
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)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 32 more
Caused by: java.lang.NullPointerException
at DAOKPI.TestAjax.createQueryOracle2(TestAjax.java:1201)
at DAOKPI.TestAjax.fillReport2(TestAjax.java:925)
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 javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:737)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:467)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:254)
at com.sun.el.parser.AstValue.invoke(AstValue.java:228)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 33 more
- Merci de nous montrer la TestAjax classe.
Vous devez vous connecter pour publier un commentaire.
Regardez le bas de la racine de la cause de la stacktrace:
Ouvrir
DAOKPI.TestAjax
classe et aller àcreateQueryOracle2()
méthode. Ligne 1201 doit ressembler à quelque chose comme ceci:Cette exception est d'essayer de vous dire que
someObject
estnull
. Vous avez besoin de réparer par vous assurer que c'est pasnull
au point que vous l'appelez. Par exemple, il suffit d'instanciation.Vous pourriez tout aussi bien ignorer l'appel tout en vérifiant au préalable s'il n'est pas
null
.Ou si elle représente un managed bean de propriété ou certains d'injection de dépendance de la propriété, assurez-vous que les champs d'application sont à droite et les injecteur a fait son travail.
Sans rapport avec au problème concret, un managed bean classe avec plus de 1201 lignes est vraiment une conception de l'odorat. Envisager de refactoring. Les champs de formulaire, par exemple, peut aller dans une entité/classe javabean. Entreprise tâches peuvent aller dans une classe de service. Base de données tâches d'interaction peut aller dans une classe DAO. Qui peuvent être des propriétés du bean géré.
En majuscule les noms de paquets n'est pas vraiment conforme à la Conventions De Nommage Java. Aussi, direct EL méthode des expressions comme
#{TestAjax.getMyListProject()}
et#{TestAjax.fillReport2()}
sont moches aussi longtemps que vous n'avez pas besoin de passer des arguments ou invoquer la non-getters, de mieux utiliser les#{TestAjax.myListProject}
et#{TestAjax.fillReport2}
. Enfin, JSF managed bean noms doivent commencer avec de minuscules qu'ils ne représente que les instances d'une classe:#{testAjax}
.