无法在Primefaces LazyDataModel实现类中注入CDI bean

时间:2015-03-12 08:06:48

标签: java primefaces cdi jsf-2.2

我在org.primefaces.model.LazyDataModel的实现类中注入的任何CDI bean都是null。惰性模型实现类本身是一个范围为@Named的CDI @javax.faces.bean.ViewScoped bean。它看起来像这样:

    @Named("myLazyModel")
    @ViewScoped
    Class MyLazyModel extends LazyDataModel implements Serializable {

    public MyLazyModel() {

    }

    @Inject
    AnotherCdiBeanClass injectedObj;

    public AnotherCdiBeanClass getInjectedObj() {
        return injectedObj;
    }

    public AnotherCdiBeanClass setInjectedObj(AnotherCdiBeanClass anotherCdiBeanClassObj) {
        this.injectedObj = anotherCdiBeanClassObj;  
    }


    public void someMethod() {
       getInjectedObj(); // Its NULL, why?
    }


}

在lazymodel实现bean类中注入的时候,我确实从Java中获得了eclipse的警告。警告就像 lazymodel类bean不能被容器代理,因为它不包含非私有的无参数构造函数,并且bean不是普通的作用域bean (类似的东西)。 / p>

还有一个问题,在LazyDataModel实现类中,我将rowCount设置为实际数据列表的动态大小(在网格中过滤后的大小)。但是在将一些CDI bean外部的lazymodel实现类实例化后,我得到的rowCount为零。

new MyLazyModel(actualDataList).getRowCount() - > 0

调试后,我发现它确实包含完整的实际数据列表,但rowCount仍为零。

我需要在过滤行的rowCount中随意输入并在primefaces网格上过滤它们,以便我可以使用当前过滤的网格的rowCount值动态更新outputLabel。

int currentRowCount = actualDataListInLazyModelClass.size();

我将像这样更新outputLabel:

org.primefaces.context.RequestContext.getCurrentInstance.update("myForm:recordCountLabel");

但在此之前,我需要使用rowCount值设置注入bean(View'支持bean)的属性,但注入的bean本身如上所述变为null。

getInjectedObj().setNoOfRecords(Integer.toString(currentRowCount));

// NULL POINTER因为getInjectedObj()为null

很抱歉,由于我的限制,我或多或少地描述了一些事情。

1 个答案:

答案 0 :(得分:0)

您的ViewScoped错误。对于JSF 2.2上的CDI,它应该是javax.faces.view.ViewScoped,如果你使用的是JSF 2.0 / 2.1但是正在使用CDI(你应该'),你可以使用OmniFaces Viewscoped

另见