【问题标题】:JSF @ManagedProperty not being injectedJSF @ManagedProperty 没有被注入
【发布时间】:2017-01-14 23:04:01
【问题描述】:

我正在编写一个 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;
    }
}

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

【问题讨论】:

    标签: hibernate jsf


    【解决方案1】:

    我猜eager=true 是问题所在。 'Eager true' 仅在应用程序范围的 bean 中有意义,我不知道它在会话范围的 bean 中有什么影响,因为它不是为此而设计的。但是从您的描述来看,它似乎具有在您启动应用程序时正在创建一个对象的效果,但该对象与您尝试从中访问的 Trigger bean 的对象不在同一个会话上下文中访问它. 只要没有从任何 xhtml 页面引用 PermissionBeanTrigger 类中的 managedProperty 将保持为 null

    【讨论】:

      猜你喜欢
      • 2012-02-14
      • 2011-07-07
      • 1970-01-01
      • 2012-11-14
      • 2013-10-01
      • 1970-01-01
      • 2011-11-22
      • 2012-08-26
      • 1970-01-01
      相关资源
      最近更新 更多