2012-03-01 170 views
1

在我的managedBean中,如果将范围从@RequestScoped更改为@ViewScoped,我得到以下错误堆栈。我该如何解决这个问题?当我运行我的应用程序时,我可以在页面中看到结果。错误StandardWrapperValve [Faces Servlet]:PWC1406:Servlet.service()for servlet Faces Servlet抛出异常

我在GlassFish 3运行与钻嘴鱼科2.1.3(FCS B02)

问候

WARNING: StandardWrapperValve[Faces Servlet]: 
PWC1406: Servlet.service() for servlet Faces Servlet threw exception 
    java.io.NotSerializableException: bean 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 
     at java.util.ArrayList.writeObject(ArrayList.java:570) 
     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 java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
     at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 
     at java.util.HashMap.writeObject(HashMap.java:1001) 
     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 java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
     at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
     at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1346) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1154) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 
     at java.util.HashMap.writeObject(HashMap.java:1001) 
     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 java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 
     at com.sun.faces.renderkit.ClientSideStateHelper.doWriteState(ClientSideStateHelper.java:325) 
     at com.sun.faces.renderkit.ClientSideStateHelper.writeState(ClientSideStateHelper.java:173) 
     at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122) 
     at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166) 
     at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225) 
     at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418) 
     at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
     at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
     at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
     at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) 
     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:330) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
     at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) 
     at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) 
     at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) 
     at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) 
     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) 

更新1

public class SchedulesBean implements Serializable { 

    Logger logger = Logger.getLogger(this.getClass().getName().toString()); 
    CommonMethods commonMethods = new CommonMethods(); 
    private ScheduleDAO scheduleDAO = DatabaseConnection 
      .getInstance(commonMethods.getDSName()).geScheduleDAO(); 
    List<Schedule> beanValues = new ArrayList<Schedule>(); 
    private Schedule schedule; 

    private Schedule selectedRow = new Schedule(); 

    public SchedulesBean() { 

     this.getSchedules();     
    } 

    public Schedule getSchedule() { 
     return schedule; 
    } 

    public void setSchedule(Schedule schedule) { 
     this.schedule = schedule; 
    } 

    public void getSchedules() { 

     try { 
      beanValues = scheduleDAO.loadSchedules(); 

     } catch (Exception e) { 
      // TODO: handle exception 
     } 

    } 

    public void selectedRow(SelectEvent event) { 
     selectedRow = (Schedule) event.getObject(); 
     logger.info("selectedRow "+selectedRow); 
    } 

回答

1

让你的bean实现java.io.Serializable接口。问题得到解决。

+0

我已经有'public class bean implements Serializable {'或者我错过了什么? – user75ponic 2012-03-01 07:53:14

+0

你可以发布豆类代码 – rags 2012-03-01 08:41:39

+0

添加我的豆作为更新1上面。谢谢 – user75ponic 2012-03-01 08:49:06

1

您还可以尝试为所有不可序列化的属性添加“transient”关键字。

transient Logger logger = Logger.getLogger(... 

transient private ScheduleDAO scheduleDAO 

另一种方法来检查,如果bean是序列化是对你的代码像Findbugs (TM),或任何家庭的工具适用QA​​工具来检查你的代码的这一方面。

相关问题