10

JBoss 7.1.1のJSF2プロジェクトでは、セッション タイムアウトを定義し、web.xml問題なく動作します。

ただし、ビューの有効期限が切れる場合があり、セッションがまだ有効であっても、次のようなエラーが発生します。

javax.faces.application.ViewExpiredException: viewId:/... - View /... could 
not be restored.

セッションの場合と同様に、ビューのタイムアウトはどこで設定できますか? または、ビューの有効期限が切れたのは別の原因ですか?

4

1 に答える 1

15

もう 1 つの原因はViewExpiredException、セッションで作成された論理ビューが多すぎることです。デフォルトの制限は JSF 実装固有であり、特定のビューに対するすべての同期 GET 要求は、基本的に新しいビューを作成します。したがって、たとえば、Mojarra (デフォルトの制限は 15) を使用してブラウザー セッションを開始し、同じビューを 16 の異なるタブで開き、最初のタブでフォームを送信すると、この例外も発生する可能性があります。 . com.sun.faces.numberOfLogicalViewsこの制限は、Mojarra および MyFaces 用の JSF 実装固有のコンテキスト パラメータで構成できますorg.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION(デフォルトは 20)。

ただし、これは非常にまれな現実世界の問題です。Web アプリケーションが実際にこのように使用されるように設計されている場合 (たとえば、ディスカッション フォーラムや Q&A など、複数のタブで開くことを勧めるソーシャル/コミュニティ サイト)、代わりにクライアント側の状態保存の使用を検討できます。

以下も参照してください。

于 2012-09-24T11:58:28.103 に答える