2010-10-27 69 views
0

其他Java战士!
我有这个托管bean来处理Rede(Network)实体相关的操作,称为RedesBean(NetworksBean)。我有三个页面插入一个新的网络:redes/nova.xhtml(new.xhtml),基本上是一系列输入字段来插入网络属性和一个调用cadastraNova()(createNew())方法的commandButton验证输入并计算一些值。然后,cadastraNova()方法返回到显示每个属性值和计算值的另一页redes/confirma.xhtml(confirm.xhtml),要求用户确认,然后调用另一个方法,即cadastraRede()(createNetwork() )通过JPA将网络持久化到数据库。
当我使用@RequestScoped时,值不会保留在第二个和第三个视图之间。当我使用@SessionScoped时,值被保留,但我认为@SessionScoped这是有点太多。所以,经过一番谷歌搜索之后,我发现了这个@ViewScoped注释,我认为这符合我的情况。但问题在于:在第一个视图(redes/nova.xhtml)中单击commandButton后,我得到一个由EvaluationException引发的NullPointerExcetption。 cadastraNova()方法被调用,但它无法评估bean属性值。相关的代码贴在下面:当@ViewScoped bean中的方法被调用时,JSF:EvaluationException和NPE

RedesBean.java

package br.cefetmg.ccc.gerir.web; 

// suppressed imports 

/** 
* Bean to manage network and subnetwork views 
* @author Arthur Alkmim 
* 
*/ 
@ManagedBean(name="redes") 
@ViewScoped 
public class RedesBean implements Serializable{ 
@EJB 
transient RedeDAO redeDAO; 

private static final Logger logger = Logger.getLogger("br.cefetmg.ccc.gerir.web.RedesBean"); 

// attributes, suppressed 

// getters and setters, suppressed 

// the "broken" method 
public String cadastraNova(){ 
    logger.info("Method cadastraNova() successfully invoked"); 
    // verifica se a rede não já existe 
    if(redeDAO.buscaPorId(ipBase) != null){ 
    FacesContext.getCurrentInstance().addMessage("Rede já existente", new FacesMessage("Já existe uma rede com esse IP")); 
    return FacesContext.getCurrentInstance().getViewRoot().getViewId(); 
    } 
    calculaAtributos(); 
    // verifica se o range de lease é válido 
    if(!validaRange()) 
    // volta para a página de cadastro 
    return FacesContext.getCurrentInstance().getViewRoot().getViewId(); 
    return "/redes/confirma"; 
} 
// other suppressed methods 
} 

REDES/nova.xhtml

<!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:ccc="http://java.sun.com/jsf/composite/compz"> 
<ui:composition template="/resources/estilo/template.xhtml"> 
<f:loadBundle var="msg" basename="br.cefetmg.ccc.gerir.web.AppResources"/> 
<ui:define name="title">Nova rede</ui:define> 
<ui:define name="content"> 
    <h:form id="form"> 
    <h3>Principal</h3> 
    <h:panelGrid columns="2" id="principal"> 
    <h:outputText value="Nome da rede" /> 
    <h:inputText value="#{redes.nome}" id="nome" /> 

    <h:outputText value="IP" /> 
    <h:panelGroup id="ip"> 
    <ccc:inputOneIP ip="#{redes.ipBase}" id="ipBase" /> 
    /
    <h:inputText value="#{redes.cidr}" size="2" id="cidr" validatorMessage="O CIDR deve estar entre 0 e 32"> 
     <f:validateLongRange minimum="0" maximum="32"/> 
    </h:inputText> 
    </h:panelGroup> 
    </h:panelGrid> 
    <h3>Servidores</h3> 
    <h:panelGrid columns="2"> 
    <h:outputText value="Router" /> 
    <ccc:inputManyIP ip="#{redes.routers}" id="routers" /> 

    <h:outputText value="DNS" /> 
    <ccc:inputManyIP ip="#{redes.dns}" id="dns" /> 

    <h:outputText value="Netbios" /> 
    <ccc:inputManyIP ip="#{redes.netbios}" id="netbios" /> 
    </h:panelGrid> 
    <h3>Lease</h3> 
    <h:panelGrid columns="2"> 
    <h:outputText value="Tempo default" /> 
    <h:inputText value="#{redes.leaseDefault}" id="leaseDefault"> 
    <f:validateLongRange minimum="0" /> 
    </h:inputText> 

    <h:outputText value="Tempo máximo" /> 
    <h:inputText value="#{redes.leaseMax}" id="leaseMax"> 
    <f:validateLongRange minimum="0" /> 
    </h:inputText> 

    <h:outputText value="Início da faixa" /> 
    <ccc:inputOneIP ip="#{redes.rangeMin}" id="rangeMin" /> 

    <h:outputText value="Fim da faixa" /> 
    <ccc:inputOneIP ip="#{redes.rangeMax}" id="rangeMax" /> 
    </h:panelGrid> 
    <h:commandButton action="#{redes.cadastraNova}" value="Cadastra"/> 
    </h:form> 
</ui:define> 
</ui:composition> 
</html> 

REDES/confirma.xhtml

<!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:ccc="http://java.sun.com/jsf/composite/compz"> 

<ui:composition template="/resources/estilo/template.xhtml"> 
<f:loadBundle var="msg" basename="br.cefetmg.ccc.gerir.web.AppResources"/> 
<ui:define name="title">Nova rede</ui:define> 
<ui:define name="content"> 
    <h:form id="form"> 
    Nome: <h:outputText value="#{redes.nome}" /><br /> 
    <ccc:outputOneIP ip="#{redes.ipBase}" />/<h:outputText value="#{redes.cidr}" /> 
    (<ccc:outputOneIP ip="#{redes.ipMin}" /> a <ccc:outputOneIP ip="#{redes.ipMax}" />)<br /> 
    Broadcast em: <ccc:outputOneIP ip="#{redes.broadcast}" /> <br /> 
    Máscara de rede: <ccc:outputOneIP ip="#{redes.netmask}" /><br /> 
    Roteadores: <ccc:outputManyIP ip="#{redes.routers}" /><br /> 
    Servidores de DNS: <ccc:outputManyIP ip="#{redes.dns}"/><br /> 
    Servidores netbios: <ccc:outputManyIP ip="#{redes.netbios}"/><br /> 
    Tempo de lease padrão: <h:outputText value="#{redes.leaseDefault}"/><br /> 
    Tempo de lease máximo: <h:outputText value="#{redes.leaseMax}"/><br /> 
    Range do lease: <ccc:outputOneIP ip="#{redes.rangeMin}" /> a <ccc:outputOneIP ip="#{redes.rangeMax}" /><br /> 
    <br /> 
    Estes dados estão corretos? 
    <h:commandButton action="#{redes.cadastraRede}" value="Sim" /> 
    <h:commandButton action="#{redes.cancelaCadastro}" value="Não" /> 
    </h:form> 
</ui:define> 
</ui:composition> 
</html> 

服务器日志

[#|2010-10-27T13:55:07.713-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.RedesBean|_ThreadID=31;_ThreadName=Thread-1;|Method cadastraNova() successfully invoked|#] 

[#|2010-10-27T13:55:07.713-0200|SEVERE|glassfish3.0.1|javax.enterprise.resource.webcontainer.jsf.application|_ThreadID=31;_ThreadName=Thread-1;|java.lang.NullPointerException 
javax.faces.el.EvaluationException: java.lang.NullPointerException 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
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:325) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
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:662) 
Caused by: java.lang.NullPointerException 
at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:231) 
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:102) 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
... 32 more 
|#] 

[#|2010-10-27T13:55:07.714-0200|WARNING|glassfish3.0.1|javax.enterprise.resource.webcontainer.jsf.lifecycle|_ThreadID=31;_ThreadName=Thread-1;|#{redes.cadastraNova}: java.lang.NullPointerException 
javax.faces.FacesException: #{redes.cadastraNova}: java.lang.NullPointerException 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:114) 
at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
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:325) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
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:662) 
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
... 31 more 
Caused by: java.lang.NullPointerException 
at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:231) 
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:102) 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
... 32 more 
|#] 

[#|2010-10-27T13:55:07.715-0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=31;_ThreadName=Thread-1;|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception 
javax.faces.el.EvaluationException: java.lang.NullPointerException 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
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:325) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
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:662) 
Caused by: java.lang.NullPointerException 
at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:231) 
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:102) 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
... 32 more 
|#] 

[#|2010-10-27T13:55:07.715-0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=31;_ThreadName=http-thread-pool-8080-(2);|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception 
javax.faces.el.EvaluationException: java.lang.NullPointerException 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
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:325) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
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:662) 
Caused by: java.lang.NullPointerException 
at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:231) 
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:102) 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
... 32 more 
|#] 

[#|2010-10-27T13:55:07.715-0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=31;_ThreadName=http-thread-pool-8080-(2);|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception 
javax.faces.el.EvaluationException: java.lang.NullPointerException 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
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:325) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
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:662) 
Caused by: java.lang.NullPointerException 
at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:231) 
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:102) 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
... 32 more 
|#] 

所以,正如你们可以看到的那样,这个方法真的被记录器输出在日志的第一行中调用。该方法在评估可能未更新的属性时失败。那么,如何解决?

回答

1

有点解决了。我从@ViewScoped更改为@ConversationScoped,并使用CDI注释而不是JSF - 也就是@Named和@Inject而不是@ManagedBean和@EJB。

2

您目前显示的方法代码段中唯一可以是null的是redeDAO。由于它被标记为transient我认为服务器被配置为立即(通过序列化)在磁盘上存储视图/会话,而不是始终保存在内存中。在序列化过程中任何声明为transient的内容都将丢失,并且JSF在反序列化后无法为您重新注入它。

我建议使@EJB非瞬态(只实施Serializable)并重试。

+0

它给了我一个java.io.NotSerializableException:com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate,即使我让bean可序列化。但我认为它与EJB没有任何关系,因为如果我尝试通过Logger打印任何属性,它会给我提供与第一篇文章完全相同的例外。 – 2010-10-28 11:34:24

相关问题