2011-03-18 80 views
1

我有一個場景,並沒有明確的想法,這工作呢。如何在JSF 2中的bean之間傳遞信息?

這裏的示例場景:

  1. 我有一個myView.xhtml文件,可以將顯示爲一個窗口彈出或2其他容器XHTML一個primefaces對話框彈出,讓我們說container1.xhtmlcontainer2.xhtml(該myView.xhtml包含在類似的東西? <ui:include src="myView.xhtml" />
  2. 而且,我們也有觀點作用域bean,我們姑且稱之爲myViewBeancontainer1Beancontainer2Bean
  3. container1Bean財產transactionDatecontainer2Bean具有transDate
  4. myViewBean的@PostConstruct方法的屬性將查詢基於類型日期的參數數據庫
  5. 在container1.xhtml,如果用戶點擊一個按鈕,將彈出myView.xhtmlcontainer1Bean應該能夠提供它的transactionDatemyViewBean ,並且myViewBean將能夠基於它在@PostConstruct方法中進行查詢。
  6. 在container2.xhtml,如果用戶點擊一個按鈕,將彈出myView.xhtmlcontainer2Bean應該能夠提供它的transDatemyViewBean ,並且myViewBean將能夠基於它在@PostConstruct方法中進行查詢。

我想使用@Inject Container1Bean@Inject Container2BeanMyViewBean,讓裏面的MyViewBean,我可以得到transactionDate容器1豆子transDate container2Bean。決定哪個容器bean是活動的是檢查哪一個不是null。

但是,如果容器豆生長,有可能是其他容器豆是利用MyViewBean,而@Inject ContainerXXBean將在數量增長內MyViewBean。必須有其他解決方案。

請分享如何完成此操作的想法..謝謝! :-)

謝謝!

回答

1

如果container1Bean,myViewBean和container2Bean共享一些屬性,爲什麼不把它們放在一個新的bean中? (我們稱之爲sharedBean,但我相信你會發現一個更適合你的案例)。然後,您可以在每個從屬bean中使用@ManagedProperty注入sharedBean。讓我們試着不要有循環引用。

我也會建議您查看您的架構。你確定你需要所有的豆子,分割完全是這樣嗎?這聽起來像是一件難以維繫的事情。

+0

謝謝您的建議。而且我非常感興趣的是您關於審查架構的建議。我有一個基本的想法,即每個頁面都有它自己的view-scoped-bean來處理每個頁面的操作。此外,有些頁面可以重用,可以從其他頁面查看,並且可以參數化(就像示例一樣,viewBean可以根據參數具有不同的查詢結果)。你有關於如何分割jsf bean的建議嗎?我一直想知道這方面的最佳做法。謝謝 ! – bertie 2011-03-18 15:37:49

+0

我只是說,在紙上畫一個小圖。你可以共享一個bean來獲得多個視圖,有時它會有所幫助。另外,如果圖上的多個視圖共享太多信息,只需讓它們共享該bean。剩下的問題是,問問自己是否應該有參數視圖(應該可以通過更改url來影響視圖?),或者只需調用方法(使用可能是對象的參數)來導航。 – ymajoros 2011-03-21 06:32:44

+0

謝謝你..這是有道理的! – bertie 2011-03-22 04:20:08

1

如果你只想訪問其他bean的內容,你可以編程。

從一個bean中獲取當前的FacesContext實例。使用該上下文,您可以獲取其他bean的實例。

看到這個illustration。根據你的問題的標題,你想要在豆類之間的一些信息。你可以通過調用另一個bean的公共方法來完成這個任務,這些方法可能是專門爲此目的而創建的。 (setter方法干將)。

+0

謝謝,這是一個從FacesContext獲取bean的方式列表。但我認爲這裏的情況並不是通過名稱獲取bean,因爲我可以使用@Inject。這更多的是我怎樣才能使一個可重用的視圖/豆,可以以某種方式從另一個包含視圖參數化。我開始考慮爲此使用JSF 2複合組件。呵呵 .. – bertie 2011-03-19 12:22:07

相關問題