发表时间:2010-04-14
最后修改:2010-04-14
JSF1.2依赖配置文件faces-config.xml 来实现 MBean的管理,到了2.0,我们可以使用注入的方式实现。
0.唠叨
JSR299规定了如何编写注入,但是JBoss的例子中使用 @Named,在我的程序中是失灵的,我必须使用@ManagedBean来实现。JavaEE6给了规范,为什么大家不按照统一的名字来实现内?
1.MBean的声明
JSF1.2实现MBean管理:
<managed-bean>
<managed-bean-name>usersBean</managed-bean-name>
<managed-bean-class>com.radvision.icm.faces.bean.directory.webbean.UsersBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
JSF2.0实现注入声明:
import javax.faces.bean.*;
@ManagedBean
@ViewScoped
public class UsersBean
2.实现页面级范围MBean
JSF1.2/Richfaces3.3.x或更早版本:
只有application,session,request三个级别的MBean范围,若实现page级别的,需要在jsp/jsf/xhtml页面上声明该类为a4j:keepAlive。
JSF2.0的scope范围:
@ApplicationScoped
@CustomScoped
@NoneScoped
@RequestScoped
@SessionScoped
@ViewScoped
其中@ViewScoped用来实现页面级MBean的,可以替代a4j:keepAlive
3.实现对MBean的引用
JSF1.2可以从context中获取三个级别的MBean:
final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
return (HttpServletRequest) ;
(BeanName)externalContext.getRequest().getAttribute(beanName);
(BeanName)externalContext.getSession(true).getAttribute(beanName)
(BeanName)externalContext.getApplicationMap().get(beanName);
JSF2.0可以在使用MBean的类中实现依赖注入:
@ManagedProperty(value="#{beanName}")
private BeanName beanName;
public BeanName getBeanName() {
return beanName;
}
public void setBeanName(BeanName beanName) {
this.beanName = beanName;
}