java.lang.NullPointerException, когда я нахожусь внутри конструктора управляемого компонента, вызывающего методы из других компонентов - PullRequest
2 голосов
/ 01 сентября 2010

Когда я нахожусь внутри конструктора управляемого объекта и пытаюсь обратиться к другим методам из других компонентов, я получаю java.lang.NullPointerException.Есть ли какая-то спецификация, которая не позволяет управляемому бину делать это?

@ManagedProperty(value="#{document}")
private DisplayListController document;

@EJB
DocumentSBean sBean;

public NewUserController() {
    document.list();
} 

Выше я просто делаю обычную инъекцию бина, ничего особенного.document - это управляемый бин SessionScoped, имеющий метод list(), который просто возвращает String.NewUserController - это управляемый компонент RequestScoped.

Ответы [ 2 ]

8 голосов
/ 01 сентября 2010

Вы должны заглянуть в @PostConstruct.. Пример можно найти здесь .

Ваши свойства не устанавливаются, когда вы пытаетесь получить к ним доступ.Вам нужно дождаться их установки.Управление компонентами обычно происходит:

  1. Создание компонентов
  2. Установка свойств

Вы пытаетесь использовать свойства, которые не были установлены, что приводит кNPE.

Таким образом, ваш код может измениться на:

public NewUserController() { }

@PostConstruct
public void init() {
    document.list();
}
0 голосов
/ 01 сентября 2010

DisplayListController, вероятно, следует настроить для вызова собственного метода init с аннотацией @PostConstruct в методе list

...