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;
}
}
你有什麼想法嗎?我只需要重定向到同一頁面,但是用新的對話... – dgimenes 2012-03-06 20:11:12
不,對不起。也許如果你挖入impl並看看它的apis。 – LightGuard 2012-03-08 16:08:36
沒關係。謝謝! – dgimenes 2012-03-13 17:45:21