自动实例化会话bean?

时间:2011-05-18 10:31:01

标签: jsf jsf-1.2

我有一个会话bean

<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>

现在,我正在将此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>

好吧,当我在providerSelectionBean java代码中访问vdcAddBean时,我收到了一个N​​PE,因为vdcAddBean尚未初始化。如果我先在我的菜单中,在后端有vdcAddBean并回到providerSelectionBean的页面中,一切都很有效,因为vdcAddBean似乎已经初始化了。

问题是:如何在访问providerSelectionBean bean时强制vdcAddBean被初始化(如果它为null)?

感谢。

2 个答案:

答案 0 :(得分:2)

替换

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

通过

<value>#{vdcAddBean}</value> 

让JSF自动创建bean。

答案 1 :(得分:1)

JSF托管会话bean存储在ExternalContext中,您可以使用以下方法getSessionMap检索包含所有这些内容的地图。

这个映射的关键应该是managed-bean-name,所以也许你可以检查null,如果有的话,那么尝试实例化你的bean并将它直接放到sessionMap中?