2012-03-13 84 views
1

我對你的專家Managed Bean的一個以上的範圍

一個簡單的問題

是否有可能同時擁有會話範圍和請求範圍爲同一個bean?

例如,我有一個豆myBean,它可以是Session-ScopedRequest-Scoped

編輯

做一些試驗後,我決定消滅這是會話範圍的第一次會議。

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("SessionBean1"); 

有沒有一種方法可以重新初始化它的請求範圍之一?

回答

0

您可以使用多個作用域對一個託管bean進行註釋。代碼將無錯誤地進行編譯和部署(使用Mojarra 2.1.3/Glassfish 3.1.1進行測試)。

但是,效果將始終是最狹​​窄的範圍將被應用。所以如果你用@SessionScoped@RequestScoped註釋你的bean,這個bean將在請求範圍內。

1

通過defining it in a faces-config.xml file可以在兩個不同的作用域中定義一個相同類型的bean。通過這樣的表達式#{sessionScope.myBean}#{requestScope.myBean}

它可以在同一Bean實例放入一個以上的範圍以編程方式使用FacesContext引用時這將導致兩個不同的實例。

但是,這種豆的存在暗示了設計缺陷。

+0

所以最好有兩個豆子? – sameer 2012-03-13 11:52:15

+0

很難說。設計中至少有一個嚴重的缺陷。 – BalusC 2012-03-13 14:23:24

+0

@BalusC通過使用facescontext來銷燬會話bean之後,通過任何方式設置bean以請求作用域? – sameer 2012-03-14 05:22:14