我只是想知道如何在CDI中開始新的對話。 如果沒有cid請求參數,容器似乎開始一個新對話,但在某些情況下,我想從我的控制器明確啓動一個新對話。JSF CDI(焊接)開始新的對話
示例:JSF頁面用於編輯對話作用域控制器bean的狀態保持。提交一個ajax請求,調用控制器的一個方法,該方法觸發一個事件,將一個應該在新對話中的不同控制器中編輯的子實體傳遞給它。 我無法找到解決方案。 我已經看過Apache Myfaces CODI,但也找不到解決該問題的模式。
請幫我解決。
[編輯] 好的。也許我沒有描述足夠詳細的問題。還有一個嘗試: 如果我想訪問具有不同(新)對話ID的「相同」conversationscoped控制器bean的新實例。這是如何運作的? image你有..讓我們說一個OrderControllerBean來編輯一個Order實體。此控制器具有像public void createSubOrder()這樣的JSF操作方法。這個方法應該創建一個新的Order,並用它做一些奇特的事情。之後,它應該被傳遞給具有不同對話ID的新OrderControllerBean實例。也許通過使用CDI事件。沒關係。問題是:OrderControllerBean已經存在於我的對話中。它用於編輯當前的訂單。所以它不能用來創建和編輯我們剛剛創建的子命令。那麼如何創建一個OrderControllerBean的新實例呢? 也許這不是正確的做法。但到目前爲止,我無法找到另一個可能創建新的對話,而無需將瀏覽器發送到具有空白cid參數的新網址。但之後我無法在這些對話之間交換信息。我如何將會話1中創建的非持久性訂單帶到會話2中的同一個控制器?我的問題只是關於對話的談話。
[編輯] 我讀了整個文檔和所有與它一起到目前爲止的例子。 根據這些聲明(http://docs.jboss.org/cdi/spec/1.0/html/contexts.html#conversationcontext),CDI對話似乎與JSF密切相關。不幸的是我找不到更深入技術細節的文檔。由於發送新請求沒有其他方式來獲得新對話,因此有必要在視圖層直接保存關於新對話如何以及何時開始的邏輯。這絕對不是我能想象的最好方式。我的下一個嘗試是對Seam 3的評估,因爲我記得Seam 2中有一些@Begin和@End註釋,它們可以更好地控制對話。還有一些標籤庫讓你指定對話傳播。我想知道爲什麼其他人沒有類似的問題。目前,CDI在複雜項目中的應用並不廣泛,或者在理解事物應如何運作方面遇到很大問題。到目前爲止,我找不到任何不僅僅是簡單演示的CDI/CODI示例。如果有人鏈接到一個顯示對話高級用法的示例,無論使用哪種便攜式擴展,請讓我知道。
僅僅因爲你不理解它,並不意味着某些東西不被使用。 @ Begin/@ End根本不會幫你。是的,CODI沒有提供很多例子。但是,您必須瞭解某些內容才能正確使用它。你可以通過檢查API/SPI(java)文檔或者在源代碼處詢問。你唯一的問題是你喜歡將一個實例從一個已關閉的實例傳遞給一個新的實例。如果沒有在轉換過程中處於活動狀態的存儲,這種方法無法正常工作如果你有這個,它完全支持CODI(但不是標準的CDI對話)。其餘的是在我的答案'編輯'。 –