4

JSF1.2 + Richfaces 3.3.3 Final、MyFaces 1.2.7、Spring + Hibernateを使用するアプリケーションがあり、ブラウザのキャッシュとCookieをクリアしてアプリケーションに再度ログインすると、毎回以下の例外が発生します。

javax.faces.application.ViewExpiredException-/app/project
/index.jsfビュー識別子の保存されたビューステートが見つかりませんでした:/app/project/index.jsf

上記の例外を解決する方法を誰かに教えてもらえますか?

4

1 に答える 1

9

これを解決するには、サーバー側のセッションではなく、POSTフォームの非表示の入力フィールドにビューが(もちろんシリアル化された形式で)保存されるように、状態保存方法をに設定しclientます。 Cookieserverによって参照されるJSESSIONIDため、セッションCookieを削除するか、セッションが期限切れになると、基本的にすべてのビューが失われます。これを行うには、次のコンテキストパラメータをweb.xml:に追加します。

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

上記が何らかの理由でオプションではない場合、あなたができる最善のことはweb.xml、次のようにエラーページとしてそれを穏やかに処理することです:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/errors/sessionexpired.jsf</location>
</error-page>

これは例外を解決するものではありませんが、少なくともエラーページで、問題とエンドユーザーが実行する必要のあるアクションについてエンドユーザーに通知する機会を提供します。エラーページがログインページを指すようにして、エンドユーザーが再びログインページに直面している理由に関するメッセージを条件付きでレンダリングすることもできます。

参照:

于 2011-11-29T18:21:29.820 に答える