簡體   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