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(实体列表)
我究竟做错了什么?
@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()相当自我记录.