ejbFacade имеет значение null

Я вызываю управляемый бин OverzichtAlle.java со страницы jsf overzichtAlleGroepen.xhtml.

Но когда я попадаю на эту страницу, я получаю сообщение об ошибке, которое не может создать экземпляр manageBeans.OverzichtAlle из-за исключения Nullpointer...

Когда я отлаживаю, я вижу, что мой ejbFacade равен нулю.

это EJB

@EJB private ProjecttypeEFacade ejbFacade;

и это мой конструктор:

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

projE - это список (список сущностей)

Что я делаю неправильно?


person Dzjieker    schedule 12.08.2011    source источник


Ответы (1)


@EJB вводятся после создания bean-компонента. Для диспетчера инъекций EJB невозможно вызвать метод установки компонента перед его созданием:

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

Вместо этого за кулисами происходит следующее:

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

Таким образом, ejbFacade не доступен внутри конструктора компонента. Обычный подход заключается в использовании для этого метода @PostConstruct. .

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

Метод @PostConstruct вызывается непосредственно после создания bean-компонента и внедрения всех управляемых свойств и зависимостей. Там вы можете выполнить свою работу по инициализации, зависящую от EJB. Затем за кулисами произойдет следующее:

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

Обратите внимание, что имя метода не имеет значения. Но init() довольно самодокументирован.

person BalusC    schedule 12.08.2011