0

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

4

0 回答 0