2009-11-11 27 views
7

javax.faces.application.ViewExpiredExceptionを持っているときに、ユーザーをログインページに送信したいとします。com.sun.faces.enableRestoreView11Compatibility JSF 1.2の代わりに使用するもの

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のための解決策は何ですか?

答えて

12

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

com.sun.faces.enableRestoreView11Compatibility == trueは、「ViewExpiredExceptionを投げてはならず、古いものが期限切れの場合は新しいビューを作成する」という意味です。

JSF 1.1行動にIBM notes

は言う:それは新しいビューであり、そのような状態としてビューに通常あるアイテムは、もはや存在しないされているので、これは不利な行動を持つことができます

デフォルトJSF 1.2動作は、このようthe specに定義されている:、要求がポストバックである場合、ViewHandler.restoreView()を呼び出す

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

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


com.sun名前空間には、それはおそらく、すべてのJSF実装では動作しませんので、パラメータは、日/クロサギ科および派生実装固有の設定であることを示唆しています。

+1

私はを使用してユーザーをログインページにリダイレクトすることができると考えましたが、この互換性パラメータがないと動作しません。このリダイレクションを行うためにPhaseListenerを記述する必要があります。あるいは、簡単な方法がいくつかあります。 – aindl

+0

この設定はJSF 2.2でも有効ですか、それともitherオプションがありますか? –

関連する問題