私は非過渡的な会話の中で、私はそのビーンの新しい会話を開始する必要があります。新しいCDIの会話
ケースは次のとおりです。注文の作成と変更を処理するcdi Beanを持つjsfページがあります。このページのメニューには「新規注文」という項目があります。したがって、オーダーを変更するときは、「新しいオーダー」をクリックする必要があり、ページを新しいCIDと新しい会話スコープでリフレッシュする必要があります。しかし、私がこれをやろうとすると、conversation.end()とconversation.begin()を先に呼び出しても、conversation.getConverstaionId()は常に同じ値を返します。
編集:
私には注文を編集するページがあります。メニューの新しいボタンをクリックすると、新しい会話を更新して新しい会話を開始し、新しい注文を追加します。このボタンはredirectToNewOrderPage()メソッドを呼び出します。しかし、それはコードで記述された問題があります。
@Named
@ConversationScoped
public class OrderEditBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private Conversation conversation;
[...]
public void redirectToNewOrderPage() {
String cid = createNewConversationId();
setOrder(null);
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("/OrdersManager/restricted/orders/edit.xhtml?cid=" + cid);
} catch (IOException e) {
e.printStackTrace();
}
}
private String createNewConversationId() {
String oldConversationId = null;
String newConversationId = null;
oldConversationId = conversation.getId();
if (!conversation.isTransient() && conversation.getId() != null) {
conversation.end();
}
conversation.begin();
newConversationId = conversation.getId();
// **************
// at this point newConversationId is equal to
// oldConversationId if the conversation was NOT transient.
// **************
return newConversationId;
}
}
代替手段についてご存知ですか?私はちょうど同じページにリダイレクトする必要があったが、新しい会話があった。 – dgimenes
いいえ、申し訳ありません。たぶんあなたがインプラントを掘り出し、そのアピスを見た場合。 – LightGuard
これは問題ありません。ありがとうございました! – dgimenes