繁体   English   中英

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

[英]Unable to inject a CDI bean in Primefaces LazyDataModel implementation class

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

    @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不能由容器代理,因为它不包含非私有的no-arg构造函数,并且该bean不是普通作用域的bean (类似的东西)。

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

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

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

在键入并在primefaces网格上对其进行过滤时,我需要经过过滤的行的rowCount ,以便可以使用当前过滤的网格的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

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

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

也可以看看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM