[英]JSF @ManagedProperty not being injected
我正在编写一个Web应用程序,并且正在使用JSF 2.0和Hibernate 3.5。 我的问题是,当我想注入未注入的bean时。
这是我要注入的类(我只复制了重要部分):
@ManagedBean(name="permissionBean", eager = true)
@SessionScoped
public class PermissionBean {
private List<Role> rolesList;
public PermissionBean(){
refresh();
}
private void refresh(){
rolesList = Role.queryRolesList();
}
public void test(){
System.out.println("__________TEST ");
}
//getter setter for the rolesList
}
变成这个:
@ManagedBean(name="triggerBean")
@SessionScoped
public class Trigger extends EmptyInterceptor {
@ManagedProperty(value="#{permissionBean}")
public PermissionBean pb;
public void onDelete(..) {
pb.test();
}
public void setPb(PermissionBean pb) {
System.out.println("______setting bean");
this.pb = pb;
}
}
第二类是休眠的拦截器类。 该程序启动并运行,我确定PermissionBean正在构造中,因为我正在使用其中的方法,并且看到了列表。 但是,当我尝试从中删除它时, onDelete()
函数触发了一个空指针异常(在那一行我调用pb.test()
)。 经过一番尝试后,我将测试写出到设置器中,但是该方法从未被调用。
我想问题在于eager=true
。 “渴望真实”仅在应用程序范围的Bean中有意义,我不知道它在会话范围的Bean中有什么作用,因为它不是为此而设计的。 但是从您的描述来看,似乎具有以下效果:启动应用程序时正在创建一个对象,但是该对象与您尝试从中访问它的Trigger
bean的对象不在同一会话上下文中。 只要未从任何xhtml页中引用PermissionBean
, Trigger
类内的managedProperty将保持为null
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.