9

javax.faces.application.ViewExpiredException がある場合、ユーザーをログインページに送りたいと思います。

web.xml

...
    <context-param>
        <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
        <param-value>true</param-value>
    </context-param>
...
 <error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/errors/sessionExpired.jsf</location>
 </error-page>

sessionExpired.jsf

....
<c:redirect url="/index.jsf" />

enableRestoreView11Compatibility は JSF 1.1 で使用されていたメソッドですが、JSF 1.2 での解決策は何ですか?

4

1 に答える 1

14

com.sun.faces.enableRestoreView11CompatibilityJSF 1.2 が JSF 1.1 のように動作するように指示する JSF 1.2 設定です。

com.sun.faces.enableRestoreView11Compatibility==trueは、「 ; をスローしないでくださいViewExpiredException。代わりに、古いビューの有効期限が切れた場合に新しいビューを作成するだけです」という意味です。

JSF 1.1 の動作に関するIBM のメモには、次のように記載されています。

これは新しいビューであり、状態などの通常はビューにあるアイテムが存在しないため、不適切な動作が発生する可能性があります。

デフォルトの JSF 1.2 の動作は、仕様で次のように定義されています。

リクエストがポストバックの場合、 を呼び出しViewHandler.restoreView()、現在のリクエストのインスタンスとビュー識別子を渡し、復元されたビューのFacesContextを返します。UIViewRoot戻り値ViewHandler.restoreView()が nullの場合はViewExpiredException、適切なエラー メッセージとともに をスローします。javax.faces.application.ViewExpiredException is aFacesException` をスローして、ビュー識別子に対して期待されるビューが返されなかったことをアプリケーションに通知する必要があります。アプリケーションは、この例外に基づいて何らかのアクションを実行することを選択できます。

ビューの有効期限が切れたときにをViewExpiredExceptionスローするには、パラメーターを削除するcom.sun.faces.enableRestoreView11Compatibilityか、 に設定しfalseます。


名前com.sun空間は、パラメーターが Sun/Mojarra および派生実装固有の設定であることを示唆しているため、おそらくすべての JSF 実装で機能するとは限りません。

于 2009-11-11T16:46:49.347 に答える