我从jsf页面调用managedBean OverzichtAlle.java overzichtAlleGroepen.xhtml
但是当我进入这个页面时,由于Nullpointerexception,我得到的错误消息无法实例化managedBeans.OverzichtAlle ...
当我调试时,我看到我的ejbFacade为空..
这是EJB
@EJB private ProjecttypeEFacade ejbFacade;
这是我的构造函数:
public OverzichtAlle()
{
projE = ejbFacade.findAll();
omvormenProjectTypes();
}
projE是一个List(实体列表)
我做错了什么?
答案 0 :(得分:5)
@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()
非常自我记录。