автоинсталлировать сессионный компонент? - PullRequest
2 голосов
/ 18 мая 2011

у меня есть сессионный компонент

<managed-bean>
  <managed-bean-name>vdcAddBean</managed-bean-name>
  <managed-bean-class>com.cloud.appsportfolio.jsf.vdc.beans.VDCAddBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Теперь я добавляю этот боб в один запрос:

<managed-bean>
      <managed-bean-name>providerSelectionBean</managed-bean-name>
      <managed-bean-class>com.cloud.appsportfolio.jsf.sourcing.ProviderSelectionBean</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
        <property-name>vdcAddBean</property-name>
        <property-class>com.cloud.appsportfolio.jsf.vdc.beans.VDCAddBean</property-class>
        <value>#{sessionScope.vdcAddBean}</value> 
      </managed-property>
</managed-bean>

Что ж, когда я получаю доступ к vdcAddBean в providerSelectionBean Java-коде, я получаю NPE, потому что vdcAddBean еще не инициализирован. Если я иду первым в моем меню, на странице, которая имеет vdcAddBean в конце и возвращается к providerSelectionBean, все прекрасно работает, потому что кажется, что vdcAddBean уже инициализирован.

Вопрос: как я могу заставить инициализировать vdcAddBean (если он нулевой) при доступе к providerSelectionBean bean?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Замените

<value>#{sessionScope.vdcAddBean}</value> 

на

<value>#{vdcAddBean}</value> 

, чтобы JSF автоматически создал бин.

1 голос
/ 18 мая 2011

JSF-управляемые сеансовые бины хранятся в ExternalContext, вы можете получить карту со всеми из них, используя следующий метод getSessionMap.

Ключом к этой карте должно быть имя управляемого бина, поэтому, возможно, вы можете проверить наличие нулевого значения, а если так, то попробовать создать экземпляр вашего бина и поместить его непосредственно в sessionMap?

...