会话过期时,RenderResponsePhase上的JSF2.0 NPE(viewRoot为null)

时间:2012-11-19 16:24:09

标签: jsf-2 nullpointerexception viewexpiredexception

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

0 个答案:

没有答案