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>

好吧,当我在providerSelectionBeanjava 代码中访问 vdcAddBean 时,我收到一个 NPE,因为它还vdcAddBean没有初始化。如果我首先进入我的菜单,在一个页面中,该页面vdcAddBean在后端并返回providerSelectionBean所有工作都很好,因为它似乎vdcAddBean已经初始化。

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

谢谢。

4

2 回答 2

2

代替

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

经过

<value>#{vdcAddBean}</value> 

让 JSF 自动创建 bean。

于 2011-05-18T11:47:20.560 回答
1

JSF 托管会话 bean 存储在 ExternalContext 中,您可以使用以下方法 getSessionMap 检索所有这些 bean 的映射。

这个映射的关键应该是托管bean名称,所以也许您可以检查null,如果是,那么尝试实例化您的bean并将其直接放入sessionMap中?

于 2011-05-18T11:03:08.213 回答