2012-03-05 57 views
1

雖然在一個不受歡迎的對話中,我需要爲這個bean啓動一個新的對話。新的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 2012-03-06 20:11:12

+0

不,對不起。也許如果你挖入impl並看看它的apis。 – LightGuard 2012-03-08 16:08:36

+0

沒關係。謝謝! – dgimenes 2012-03-13 17:45:21