JSF @ManagedProperty未被注入

时间:2017-01-14 23:04:01

标签: hibernate jsf

我正在编写一个Web应用程序,我正在使用JSF 2.0和hibernate 3.5。我的问题是当我想要注射一个没有被注射的豆时。

这是我想要注入的类(我只复制了重要的部分):

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

第二个类是hibernate的拦截器类。程序启动并运行,我确信正在构造PermissionBean,因为我正在使用它中的方法,我看到了列表。但是当我尝试从中删除时,onDelete()函数触发器我得到一个空指针异常(在我调用pb.test()的那一行)。经过一番尝试后,我将测试写入了setter,但该方法永远不会被调用。

1 个答案:

答案 0 :(得分:0)

我想eager=true就是问题所在。渴望真实&#39;只在应用程序范围的bean中有意义,我不知道它在会话作用域bean中有什么影响,因为它不是为此而设计的。但是从您的描述来看,它似乎会在您启动应用程序时创建一个对象,但此对象与您尝试从的Trigger bean的对象不在同一会话上下文中访问它。 只要未在任何xhtml页面中引用PermissionBeanTrigger类中的managedProperty将保持null