【发布时间】:2015-03-12 08:06:48
【问题描述】:
我在org.primefaces.model.LazyDataModel 的实现类中注入的任何CDI bean,结果都是空的。惰性模型实现类本身是一个 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 不能被容器代理,因为它不包含非私有的无参数构造函数,并且 bean 不是普通的作用域 bean(类似的东西)。
还有一个问题,在LazyDataModel实现类中,我将rowCount设置为实际数据列表动态大小的大小(在网格中过滤后的大小)。但是在一些 CDI bean 中实例化惰性模型实现类之后,我的 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() 为空
很抱歉,由于我的限制,我或多或少地描述了一些事情。
【问题讨论】:
-
这实际上是两个独立的问题。这个话题与真正的原因没有太大关系。下次记住这一点。
-
据此,我已经更改了问题的标题。
标签: java primefaces cdi jsf-2.2