我不知道我所做的是錯誤的,還是我錯過了某處的註釋或配置項目。這裏的情況:JSF - 會話範圍的託管bean在會話反序列化中沒有重新注入依賴關係
我有一個JSF應用程序,其會話範圍bean名爲SessionData
。這個bean在創建時注入了一個應用程序範圍的bean引用(類型爲ApplicationData
)。當會話第一次創建時,這工作正常。如下所示的依賴注入與在faces-config.xml
文件<managed-bean>
元素完成:
<managed-bean>
<managed-bean-name>sessionData</managed-bean-name>
<managed-bean-class>my.package.SessionData</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>applicationData</property-name>
<property-class>my.package.ApplicationData</property-class>
<value>#{applicationData}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>applicationData</managed-bean-name>
<managed-bean-class>my.package.ApplicationData</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
因爲它沒有任何意義有我SessionData
對象包括ApplicationData
對象時,它是序列化,我已經標誌着ApplicationData
參考瞬態在我SessionData
對象:直到web應用程序被停止(在我的Tomcat 6.x的容器)和會話序列化
transient private ApplicationData applicationData;
一切都很好。當我重新啓動應用程序並且會話被反序列化時,我對於ApplicationData
的引用不會被JSF重新注入。我知道反序列化應該會讓瞬態領域沒有價值。 有沒有一種方法可以告知JSF,這個會話範圍對象需要在反序列化之後再次設置它的依賴關係?
我使用MyFaces JSF 1.2和Tomcat 6.0.26作爲我的Web應用程序容器。
有人建議我提供一個readObject()方法,並通過使用FacesContext在反序列化期間手動設置ApplicationData對象。我不認爲這會起作用,因爲FacesContext僅在請求的生命週期中可用。反序列化發生在應用程序啓動時。 – 2010-09-23 12:47:13
正確,這就是爲什麼我刪除了我的答案。它似乎更復雜(因此問題+1) – Bozho 2010-09-23 12:56:28