在还原视图阶段调试JSF java.lang.ClassCastException
我想了解一些关于如何调试JSF异常的原因和/或是否有人见过这种行为的建议。我将使用以下符号来描述问题:在还原视图阶段调试JSF java.lang.ClassCastException,java,jsf,exception,jsf-2,glassfish-3,Java,Jsf,Exception,Jsf 2,Glassfish 3,我想了解一些关于如何调试JSF异常的原因和/或是否有人见过这种行为的建议。我将使用以下符号来描述问题: “A”-表示查看页面A “A,CmdLink=>B”-表示单击A页中的链接后查看B页 “A,URL=>B”-表示通过在地址栏中输入页面B的URL并在查看页面A时按enter键来查看页面B。(因此JSF之前仍然生成了页面A。) 我得到以下java.lang.ClassCastException: java.lang.ClassCastException: [Ljava.lang.Object
- “A”-表示查看页面A
- “A,CmdLink=>B”-表示单击A页中的
链接后查看B页 - “A,URL=>B”-表示通过在地址栏中输入页面B的URL并在查看页面A时按enter键来查看页面B。(因此JSF之前仍然生成了页面A。)
java.lang.ClassCastException
:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.Map
at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:225)
at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:188)
at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:452)
at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:148)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:303)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:303)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:189)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:113)
按以下顺序单击页面B中的链接时:
- A、 CmdLink=>B,CmdLink=>C
- A、 URL=>B,CmdLink=>C
- D、 CmdLink=>B,CmdLink=>C
- A、 CmdLink=>B,CmdLink=>ErrorPage(而不是C),URL=>B,CmdLink=>C
- A、 CmdLink=>E,CmdLink=>F
INFO: ++++++ START PHASE RESTORE_VIEW 1 ++++++
INFO: ++++++ END PHASE RESTORE_VIEW 1 ++++++
我使用的是NetBeans 7.2、Glassfish 3.1、RichFaces 4.3.3 Final、OpenFaces 3.0和JSF 2.1
对于我如何尝试解决此问题,如果有任何有用的建议,我们将不胜感激。谢谢。我已经能够解决此问题,因为在A页(另一个选项卡中)上有另一个链接(称为CmdLinkA2),如下所示:
- A、 CmdLinkA2=>B,CmdLink=>C
和工作的所使用的不同支持bean操作方法(CmdLinkA2),返回到有问题的CmdLink的字符串最后缺少?faces redirect=true
,即相当于:
1)
而不是:
2) 只有在A页是以前查看过的B页之间的页面时才会发生异常。我唯一能想到的是,您正在将一个对象对象
(或类似对象)存储为请求属性,该属性与视图C中使用的另一个请求属性同名。如果不在请求范围内,则可能在会话或应用程序范围内,但这是同样的原则。谢谢——我会调查的。项目中的大多数支持bean都是SessionScoped。事实上,在阅读本文之后,我意识到我使用
进行页面导航是正确的,因为在显示下一页之前,支持bean将执行一些操作,即使页面A没有任何内容可以发布回服务器。