我目前正在學習JSF 2.0,我很高興看到這個對話範圍功能的存在,這對於打開一個新標籤頁或一個新窗口非常有幫助相同的頁面並擁有單獨的資源,而不是相互壓倒。JSF CDI:會話範圍bean [s]最佳實踐
但我很好奇如何以良好的方式實現這一點,關於何時開始對話以及何時關閉它。
在我的情況下,我有每個JSF頁面的每個CDI bean。假設我有一個菜單,當它被點擊時,這將導致頁面A,並從A導致B,B可能導致C,C可能導致D,所有這4個頁面連接成一個鏈。
從B或C或D豆訪問A的bean屬性是可能的,訪問B的屬性也可以從C或D豆等等。
現在即時通訊很困惑:
- 是否所有這些A B C d應該在談話範圍 與否,或 也許只是一個?因爲我認爲 有時來自ABCD鏈之外的另一個頁面 ,如頁面 F,它可能導航到頁面B, ,但我不知道如何向bean B提供 數據。
- 是否所有這些ABCD應 合併成一個豆
- 何時何地開始 交談,即時通訊思考 構造函數,但我不認爲這是一個 好主意,因爲我更喜歡開始 談話首先訪問 當頁面,而不是豆
- 在哪裏以及何時停止 談話,因此有不會是 遊逛
請分享你對此的看法。
CDI不是標準JSF的一部分。CDI代表上下文和依賴注入(JSR-299),它覆蓋'javax.enterprise'包的註釋。會話範圍也不是標準JSF的一部分。它是JSF 1.2中的JBoss Seam發明,並且被JSF 2.0規範採用爲View Scope,可以通過'@ ViewScoped'註釋來觸發。現在,你究竟在說什麼? – BalusC 2010-11-22 10:59:26
Hello BalusC,感謝您的澄清。我用CDI這個術語來說明我在使用什麼,但也許這些信息與我的問題無關,我的道歉:)據我所知,@ViewScoped是單頁重新顯示,屬性將是持續存在。但是我想從對話範圍中獲得的是,我可以在多個選項卡上打開相同的頁面,每個選項卡就像擁有自己的會話範圍一樣。因此,在選項卡上的myBean.name上提交值'albert'將不會覆蓋其他選項卡上的myBean.name。但我不知道從哪裏開始和結束對話。 – bertie 2010-11-22 11:33:33
如果有4頁的話,這會讓我更加困惑,例如,頁面A是一個瀏覽頁面,用戶可以搜索,頁面B是詳細頁面,用戶可以修改細節,頁面C是用戶可以修改的頁面細節等等。如果我想在幾個標籤中打開頁面A而不會影響另一個頁面,我必須在A的bean上使用對話範圍。但是我想這對B C和D來說也是談話範圍?關於何時何地我應該開始/結束談話。我的意思是,用戶可以打開新的標籤,並關閉標籤。我如何檢測到這一點並關閉對話? – bertie 2010-11-22 11:36:36