2013-09-25 52 views
0

我想用多個SessionScoped Backing Beans創建一個JSF-2 Portlet。我還希望他們都能用一個共同的SessionScoped Bean來共享一些POJO,這些Bean將用作對象池。用JSF-2設置ObjectPool Bean

我有兩個問題困擾着我:

  1. 我想有這個bean之前任何輔助bean的初始化。請注意,沒有xhtml頁面將直接調用對象池Bean,所以至少有一個Backing Bean將在ObjectPool之前初始化。有沒有辦法確保它將首先被初始化,除了在PostConstruct中調用其他每個Backing Bean?
  2. 我對使用ManagedProperties感到困惑,因爲我需要所有Backing Bean來調用Object Pool的屬性,而我也需要Backing Bean來調用某些Client/BackingBean函數。我怎麼做,而不創建雙引用?

回答

1
  • 關於第一個問題,你可以use在 登錄XHTML頁面一個f:prerenderView@SessionScoped豆直到你從 引用他們從頁面或自己創建並存儲在 的上下文中才創建。如果您將f:prerenderView鏈接到您的一些方法 ,它會像池一樣運行,它將被初始化爲 其餘的HttpSession。您可以稍後使用@ManagedProperty註釋將其注入其他 @SessionScoped豆。

  • 關於你的第二個問題,只要記住你不是被迫通過視圖bean去獲取會話屬性的 。還沒有 你讓對象池本身是@ManagedBean?因此直接從您的頁面訪問它 !

+0

感謝您對prerenderedView提示。關於第二個問題,是的,ObjectPool也是一個SessionScoped ManagedBean,但正如我所說的,我寧願不從xhtml頁面指出它。但是,如果這是唯一的出路,我可能會這樣做 – yannicuLar

+0

只有當視圖bean執行一些邏輯代碼來修改想要顯示的內容時,通過視圖範圍bean來訪問ObjectPool纔有意義。其他方面,直接從頁面訪問該值是完全合法的,而不需要每個視圖bean中的橋接。 –