Я не уверен, что я делаю неправильно, или я просто где-то пропустил аннотацию или элемент конфигурации. Вот ситуация:
У меня есть приложение JSF с bean-компонентом с областью действия сеанса с именем SessionData
. Этот bean-компонент имеет ссылку на bean-компонент в области приложения (типа ApplicationData
), введенную в него во время создания. Это нормально работает при первом создании сеанса. Внедрение зависимости выполняется с помощью элементов
в файле faces-config.xml
, как показано здесь:
<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
объект:
transient private ApplicationData applicationData;
Все хорошо, пока веб-приложение не будет остановлено (в моем контейнере Tomcat 6.x) и сеансы не будут сериализованы. Когда я перезапускаю приложение и сеансы десериализованы, моя ссылка на ApplicationData
не вводится повторно JSF. Я знаю, что десериализация должна оставлять временные поля без значения. Есть ли способ сообщить JSF о том, что для этого объекта в области сеанса требуется, чтобы его зависимости были снова установлены после десериализации?
Я использую MyFaces JSF 1.2 и Tomcat 6.0.26 в качестве контейнера своего веб-приложения.