我的应用程序使用 JSF 2.0.6 和 RichFaces 4.1.0。我实现了一个 ExceptionHandler,它通常在弹出窗口中显示所有异常,并且工作正常。
但是当我使用此上下文参数禁用部分状态保存时出现问题:
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
或者这个:
<context-param>
<param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
<param-value>/index.xhtml</param-value>
</context-param>
当会话过期时,我在应用程序中执行的任何操作都会引发 NullPointerException :
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:96) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl. java:139) javax.faces.webapp.FacesServlet.service(FacesServlet.java:509)
我查看了 RenderResponsePhase.java:96 它对应于:
ViewDeclarationLanguage vdl =
vh.getViewDeclarationLanguage(facesContext,
facesContext.getViewRoot().getViewId());
事实上, viewRoot 是 null !
当启用部分状态保存或会话未过期时,这永远不会发生。
由于某些原因,我需要激活完整状态保存选项,但我不知道如何在会话过期时正确处理错误。我想这是一个 JSF 错误,我想在我的网络应用程序上修复它。
附加信息:服务器:Tomcat 6.0.18