[英]Managed Bean with more than one scope
我有一個簡單的問題要問各位專家
同一bean是否可以同時具有會話范圍和請求范圍?
例如,我有一個bean myBean
,它既可以是Session-Scoped
myBean
,也可以是Request-Scoped
嗎?
編輯
經過一番嘗試后,我決定銷毀范圍內的第一個會話。
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("SessionBean1");
有沒有一種方法可以將其重新初始化為范圍限定的請求?
通過在faces-config.xml
文件中定義一個bean,可以在兩個不同的范圍內定義一個相同類型的bean。 通過#{sessionScope.myBean}
, #{requestScope.myBean}
等表達式引用時,這將導致兩個不同的實例。
可以使用FacesContext
編程方式將同一bean實例放置到多個作用域中。
但是,此類bean的存在表明存在設計缺陷。
您可以對一個以上范圍的托管bean進行注釋。 該代碼將編譯和部署而不會出現錯誤(已在Mojarra 2.1.3 / Glassfish 3.1.1中進行了測試)。
但是,結果是始終將應用最狹窄的范圍。 因此,如果用@SessionScoped
和@RequestScoped
注釋bean,則該bean將位於請求范圍內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.