私は CDI 会話スコープを使用していますが、ユーザーが通常のシナリオに従えば問題ありません。ただし、ユーザーが「会話」を完了しないと、次のエラーが発生します。
WELD-000214 Attempt to call begin() on a long-running conversation
明らかに、endメソッドを呼び出さずにbeginメソッドを2 回呼び出すためです。
それを明確にするために、これは私のシナリオです:
- 最初のページで、ユーザーは参照番号で製品を検索します。見つかった場合は、 conversation.beginを呼び出して、製品の詳細ページに移動します。
- このページで、ユーザーが保存ボタンを押すと、この時点でconversation.endを呼び出します。
問題は、ユーザーが除外する詳細ページにいるとき (たとえば、メニュー内のリンクをクリックしたとき) であるため、endメソッドが呼び出されないことです。そして、検索ページに戻ると、 beginが再度呼び出されるため、エラーが発生します。
考えられる解決策の 1 つは、ユーザーが 2 ページ目に存在するときにendメソッドを呼び出すことです。しかし、これを達成する方法がわかりません。
(私はJSF 2.1を使用しており、CDIのWeld 1.1.6実装を使用しています)
前もって感謝します