JSF注入

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

你可能感兴趣的:(bean,jsp,jboss,JSF,配置管理)