3

会話中に表示されたページを更新するとエラーが発生します。このエラーを回避するにはどうすればよいですか?

状況:

index.xhtml と age.xhtml の 2 つの JSF ページがあります。

index.xhtml には、ユーザーが生年月日を入力するフォームが含まれています (バッキング Bean「bean」のプロパティ)。ユーザーがフォームを送信すると、age.xhtml は生年月日に従って年齢を表示します。

フォームはリダイレクト付きで送信されます。

<h:commandButton value="Submit" action="#{bean.computeAge()}" />

computeAge メソッド:

conversation.begin();
return "age?faces-redirect=true";

同じバッキング Bean「bean」が両方のページで使用されます。このバッキング Bean には会話スコープがあります。

ページ age.xhtml:

Your age: #{bean.age} years

getAge メソッド:

if (!conversation.isTransient()) {
  conversation.end();
}
return ejb.computeAge(birthdate);

age.xhtml を更新する場合を除いて、すべて問題ありません。その後、次のエラー メッセージが表示されます: WELD-000321 ID 3 の復元する会話が見つかりません

更新前後にブラウザに表示される URL: http://localhost:8080/tpjsf1/faces/age.xhtml?cid=3

問題は最後の cid=3 にあります。ユーザーが age.xhtml を更新したときにエラー ページを回避することは可能ですか?

4

1 に答える 1

0

getAge メソッドで会話を終了すると、エラーが発生します。あなたの場合、インデックスページに戻ると会話が終了するはずです。存在しない会話の例外を処理するには、次のタグを Web xml に追加します。これにより、例外が上記のページにリダイレクトされます。

<error-page>   
    <exception-type>org.jboss.weld.context.NonexistentConversationException</exception-type>   
    <location>/my-foo-bar-exception-page.xhtml</location>   
</error-page>
于 2014-10-31T17:31:35.653 に答える