私のアプリケーションは 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 のバグだと思います。Web アプリで修正したいと思います。
追加情報: サーバー: Tomcat 6.0.18