我的应用程序使用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