3

我从 jsf 页面 overzichtAlleGroepen.xhtml 调用 managedBean OverzichtAlle.java

但是当我进入这个页面时,我得到错误消息 can't instantiate managedBeans.OverzichtAlle due to a Nullpointerexception ...

当我调试时,我看到我的 ejbFacade 为空..

这是 EJB

@EJB private ProjecttypeEFacade ejbFacade;

这是我的构造函数:

public OverzichtAlle() 
{
    projE = ejbFacade.findAll();
    omvormenProjectTypes();
}

projE 是一个列表(实体列表)

我究竟做错了什么?

4

1 回答 1

5

@EJBs 在bean 构建注入。它适用于 EJB 注入管理器,即在构造它之前无法调用 bean setter 方法:

overzichtAlle.setEjbFacade(ejbFacade);
OverzichtAlle overzichtAlle = new OverzichtAlle();

相反,幕后发生了以下事情:

OverzichtAlle overzichtAlle = new OverzichtAlle();
overzichtAlle.setEjbFacade(ejbFacade);

所以bean 的构造函数ejbFacade不可用。正常的方法是为此使用一种@PostConstruct方法。

@PostConstruct
public void init() {
    projE = ejbFacade.findAll();
    omvormenProjectTypes();
}

在bean 的构造和所有托管属性和依赖注入之后直接@PostConstruct调用方法。您可以在那里进行依赖于 EJB 的初始化工作。然后将在幕后发生以下情况:

OverzichtAlle overzichtAlle = new OverzichtAlle();
overzichtAlle.setEjbFacade(ejbFacade);
overzichtAlle.init();

请注意,方法名称无关紧要。但是init()非常自我记录。

于 2011-08-12T13:28:34.750 回答