2012-03-05 11 views
1

私は非過渡的な会話の中で、私はそのビーンの新しい会話を開始する必要があります。新しい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; 
    } 

} 

答えて

1

あなたがしようとしていることは動作しません。 CDIの会話範囲は、Seam 2のものと同じくらいパワーがありません。

+0

代替手段についてご存知ですか?私はちょうど同じページにリダイレクトする必要があったが、新しい会話があった。 – dgimenes

+0

いいえ、申し訳ありません。たぶんあなたがインプラントを掘り出し、そのアピスを見た場合。 – LightGuard

+0

これは問題ありません。ありがとうございました! – dgimenes

関連する問題