ejbFacade为空

Dzj*_*ker 3 jsf ejb managed-bean

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

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

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

这是EJB

@EJB private ProjecttypeEFacade ejbFacade;
Run Code Online (Sandbox Code Playgroud)

这是我的构造函数:

public OverzichtAlle() 
{
    projE = ejbFacade.findAll();
    omvormenProjectTypes();
}
Run Code Online (Sandbox Code Playgroud)

projE是一个List(实体列表)

我究竟做错了什么?

Bal*_*usC 5

@EJB豆子施工注入s .它是EJB注入管理器,因此在构造之前不可能调用bean setter方法:

overzichtAlle.setEjbFacade(ejbFacade);
OverzichtAlle overzichtAlle = new OverzichtAlle();
Run Code Online (Sandbox Code Playgroud)

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

OverzichtAlle overzichtAlle = new OverzichtAlle();
overzichtAlle.setEjbFacade(ejbFacade);
Run Code Online (Sandbox Code Playgroud)

所以,ejbFacade不是可用的bean的构造函数中.通常的方法是使用一种@PostConstruct方法.

@PostConstruct
public void init() {
    projE = ejbFacade.findAll();
    omvormenProjectTypes();
}
Run Code Online (Sandbox Code Playgroud)

一个@PostConstruct方法被调用后直接 bean的建设和管理的全部财产和依赖注射.您可以在那里执行与EJB相关的初始化作业.然后在幕后发生以下情况:

OverzichtAlle overzichtAlle = new OverzichtAlle();
overzichtAlle.setEjbFacade(ejbFacade);
overzichtAlle.init();
Run Code Online (Sandbox Code Playgroud)

请注意,方法名称无关紧要.但是init()相当自我记录.