5

CDIを使用したごく初期の頃は、faces-redirect = trueを使用して、長時間実行されている会話がアクティブになっているページに移動しているため、.. myPage.xhtml?cid=1のようなURLがあります。

ある時点で私は会話を終了します。つまり、これは合理的なことである必要があります。そうでない場合は、セッションスコープを使用する方がよいでしょうか。とにかく、会話を終了してからユーザーがF5キーを押すと、もちろん、cid = 1が存在しないため、「会話が見つかりません」というエラーが発生します。

誰かがこの問題を回避する方法を提案できますか?私はStevenVerborghViewScoped実装を使用しており、単に会話スコープのBeanを使用してページ間でパラメーターを渡します。たとえば、2つの@ViewScoped Beanがあり、それぞれが1ページと2ページにあります。@ConversationScopedParameterBeanを両方のビュースコープのBeanに@Injectします。1ページから呼び出されたアクションメソッドで会話(parameterBean.getConversation()。begin())を開始します。2ページのpreRenderViewイベントで、parameterBeanのプロパティへの参照を2ページのバッキングBeanインスタンス変数に取り込みます。会話を終了します。それは仕事であり、もはや必要ありません。

F5の問題を除いて、正常に動作します。誰かが何か提案があれば、私はそれを感謝します、うまくいけば、私は本当に明白な何かを見逃していないでしょう。リダイレクトから逃れることはできないと思います。

ありがとう。

4

1 に答える 1

4

回避策はありません。デフォルトの@ConversationScopedは完全に壊れています。代わりに、MyFacesCODIの@ConversationScopedを使用しています。これは、標準スコープで発生する可能性のあるすべての問題を解決します。

于 2011-08-21T19:30:23.207 に答える