通过配置实现managed bean的动态注入,可以解决JSF应用开发中,在Managed bean中访问其他Managed bean的实例的问题,具体方法如下:
在faces-config.xml中,说明每一个managed bean,通常定义了其名称、对应的类和作用域。例如:
<managed-bean>
<managed-bean-name>orderBean</managed-bean-name>
<managed-bean-class>
cn.com.dareway.OrderBean
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>userBean</managed-bean-name>
<managed-bean-class>
cn.com.dareway.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
但是怎样在managed bean中访问其他managed bean的实例呢?
通过配置进行动态注入,就能够解决该问题:
<managed-bean>
<managed-bean-name>userBean</managed-bean-name>
<managed-bean-class>cn.com.dareway.UserBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>orderBean</managed-bean-name>
<managed-bean-class>cn.com.dareway.OrderBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>userBeanProperty</property-name>
<property-class>cn.com.dareway.UserBean</property-class>
<value>#{userBean}</value>
</managed-property>
</managed-bean>
通常被注入的bean,是一个作用域更大的bean,例如:userBean的作用域是session,orderBean的作 用域是request,把userBean注入到orderBean中是正确的,也就是说被注入的bean的生命周期要大于当前的bean的生命周期。
在managed bean中访问注入的bean:
private UserBean userBeanProperty;
public void setUserBeanProperty(UserBean ub)
{
userBeanProperty = ub;
}
public UserBean getUserBeanProperty()
{
return userBeanProperty;
}
现在,JSF容器在运行时将userBean动态注入到orderBean中了。