当前位置: 首页 > 知识库问答 >
问题:

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

姜钊
2023-03-14

我在org.primefaces.model.LazyDataModel的实现类中注入的任何CDI bean都被证明为null。惰性模型实现类本身是一个CDI@Natedbean,范围@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类时,我确实在eclipse中收到了来自Java的警告。警告类似于lazymodel类bean不能被容器代理,因为它不包含非私有的无参数构造函数,并且bean不是普通的作用域bean(类似于此)。

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

新的MyLazyModel(实际催化剂)。getRowCount()-

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

当我在primefaces网格上输入和过滤时,我需要对过滤的行进行< code>rowCount操作,这样我就可以用当前过滤的网格的rowCount值动态更新outputLabel。

int currentRowCount = actualDataListInLazyModelClass.size();

我将像这样更新outputLabel:

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

但在此之前,我需要用rowCount值设置注入bean(视图的支持bean)的属性,但注入bean本身变成了null,如前所述。

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

//空指针,因为getInjectedObj()为空

抱歉,如果我描述的东西或多或少由于我的限制。

共有1个答案

梅飞龙
2023-03-14

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

参见也

  • 为什么有不同的豆管理注释
  • 使用 JSF 2.2 时,在每个回发请求上重新创建@ViewScoped Bean
 类似资料:
  • 问题内容: 我的测试课: 我在行上得到一个空指针异常: 在精确的给出空指针异常 如何使Junit类中的beanObject字段自动装配成为可能,以便可以使用“ BeanClass”类中的方法? 从评论中复制: 用简单的术语来说.. beanClass是具有某些方法的接口..我用 注释标记了该beanClass。.banClass 是由具有方法实现的beanClassImpl类实现的。.我需要在我的

  • 我用TestNG类创建了一个Maven项目。在TestNG。xml我已经给出了套件的名称。我使用了多个浏览器Chrome和Firefox来并行运行。仅使用setup类和一个以上的类就可以了,但是当我使用注释包含多个类时,我会得到一个注入错误,并给出一个错误。 我将提供我尝试过的代码 设置。JAVA 我得到的错误如下: 无法使用[class org.openqa.selenium.remote.De

  • 我有一个类BusinessRowMapper,它实现了将PostGres JSONB对象转换为Java对象的RowMapper。 它覆盖mapRow 现在,我如何在这个BusinessRowMapper Bean中进行PersonUtility Bean的Spring管理注入,而不是将实用程序Bean作为构造函数参数传递给BusinessRowMapper?

  • 我已经尝试了几种方法来将依赖项注入我的实现中,但没有任何效果。我已经尝试了几乎所有的stackoverflow线程。我正在使用HiberNate Validator来实现自定义验证。我希望被注入

  • 我有一个有状态的会话作用域(CDI)EJB,它保存有关用户会话的信息。 现在,我想从一个 我从webapp直接访问EJB(使用注入)到我为JSF使用的bean中(它们也是CDI管理的bean)。 我面临的问题是,似乎与JSF bean处于不同的“会话范围”。创建了两个实例;一个从JSF实例化,另一个从HttpSessionListener实例化。 我尝试通过注入实例注入bean 这个bug报告建议

  • 我上了如下的课,效果很好 现在,我没有直接使用EmpService,而是创建了一个接口,EmpService实现了该接口,如下所示。 所以现在我的资源类必须使用接口,但我不确定如何引用它必须使用的实现。 我看到了这个,我不确定我的绑定应该去哪里。(这是我第一个与Guice相关的项目,所以我是一个完全的新手)。 这就是“未绑定com.api.EmpService的实现”出现的错误这完全可以理解,但不