Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在还原视图阶段调试JSF java.lang.ClassCastException_Java_Jsf_Exception_Jsf 2_Glassfish 3 - Fatal编程技术网

在还原视图阶段调试JSF java.lang.ClassCastException

在还原视图阶段调试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

我想了解一些关于如何调试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; 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
因此,将显示带有异常的错误页面,而不是页面C。但是,以下情况不会生成错误:

  • A、 URL=>B,CmdLink=>C
  • D、 CmdLink=>B,CmdLink=>C
并且该序列第二次不会产生错误,因此正确显示C页:

  • A、 CmdLink=>B,CmdLink=>ErrorPage(而不是C),URL=>B,CmdLink=>C
只有当A页是以前查看过的B页之间的页面时(并且在浏览器的地址栏中直接输入URL无法访问B页),才会发生异常

页面A是一个复杂的页面,包含多个下拉框、RichFaces组件、一个OpenFaces选项卡集、多个datatables,并使用RichFaces AJAX(a4j),而页面B不使用其中任何一个,只使用带有命令链接的简单表单。两个页面使用相同的JSF模板层次结构。(B页是一个简单的编辑页,用于a页选项卡部分的数据表中列出的一个项目。)

问题不限于B页,即A页之后的页面。此顺序也给出了相同的例外情况,即单击E页中的链接后显示的错误页面:

  • A、 CmdLink=>E,CmdLink=>F
我尝试添加一个阶段侦听器,在单击B页中的链接后生成以下输出:

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
不会导致上述错误消息,并且C页显示正确。比较A页上有问题的
和工作的
所使用的不同支持bean操作方法(CmdLinkA2),返回到有问题的CmdLink的
字符串最后缺少
?faces redirect=true
,即相当于:

1)

而不是:


2)
只有在A页是以前查看过的B页之间的页面时才会发生异常。我唯一能想到的是,您正在将一个
对象对象
(或类似对象)存储为请求属性,该属性与视图C中使用的另一个请求属性同名。如果不在请求范围内,则可能在会话或应用程序范围内,但这是同样的原则。谢谢——我会调查的。项目中的大多数支持bean都是SessionScoped。事实上,在阅读本文之后,我意识到我使用
进行页面导航是正确的,因为在显示下一页之前,支持bean将执行一些操作,即使页面A没有任何内容可以发布回服务器。