我有一个会话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时,我收到了一个NPE,因为vdcAddBean
尚未初始化。如果我先在我的菜单中,在后端有vdcAddBean
并回到providerSelectionBean
的页面中,一切都很有效,因为vdcAddBean
似乎已经初始化了。
问题是:如何在访问providerSelectionBean
bean时强制vdcAddBean被初始化(如果它为null)?
感谢。
答案 0 :(得分:2)
替换
<value>#{sessionScope.vdcAddBean}</value>
通过
<value>#{vdcAddBean}</value>
让JSF自动创建bean。
答案 1 :(得分:1)
JSF托管会话bean存储在ExternalContext中,您可以使用以下方法getSessionMap检索包含所有这些内容的地图。
这个映射的关键应该是managed-bean-name,所以也许你可以检查null,如果有的话,那么尝试实例化你的bean并将它直接放到sessionMap中?