ejbFacade为空

时间:2011-08-12 10:38:26

标签: jsf ejb managed-bean

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

但是当我进入这个页面时,由于Nullpointerexception,我得到的错误消息无法实例化managedBeans.OverzichtAlle ...

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

这是EJB

@EJB private ProjecttypeEFacade ejbFacade;

这是我的构造函数:

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

projE是一个List(实体列表)

我做错了什么?

1 个答案:

答案 0 :(得分:5)

在 bean的构造之后,

@EJB被注入。它适用于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()非常自我记录。