Можно ли вводить bean-компонент в фазелистенизатор при использовании JSF 2.3, tomcat с реализацией cdi сварки? - PullRequest
0 голосов
/ 31 января 2019

Я хочу добавить бины @SessionScoped и @RequestScoped в мою реализацию PhaseListener, но я получил NullPointerException.

Я использую tomcat с реализацией сварки для достижения CDI.Я начал мигрировать JSF 2.2 на 2.3, поэтому я перешел на CDI с FacesContext.Ну, я заменил @ManagedBean на @Named и любые другие вещи, которые необходимо сделать во время миграции, такие как: - добавление bean-XML в каждый модуль - добавление BeanManager в контекст XML - удаление объявлений bean-компонентов изface-config.xml - добавление SPI BeanManagerкак resource-env-ref для web.xml Как я могу внедрить любой bean-компонент в PhaseListener реализации?

@Named
@SessionScoped
public class MyHandler implements Serializable {    
..}

@Named
@RequestScoped
public class MyController extends MyParentController<Example> {
..}

public class MyPhaseListener implements PhaseListener {

private MyHandler myHandler;
private MyController myController;

@Inject
public void setMyHandler(MyHandler myHandler) {
    this.myHandler= myHandler;
}

@Inject
public void setMyController (MyController myController) {
    this.myController= myController;
}
...

public void afterPhase(PhaseEvent event) {
myHandler.method()
}

myHandler injected bean равен null в методе afterPhase.

1 Ответ

0 голосов
/ 14 марта 2019
  1. Я поместил файл конфигурации CDI beans.xml в папку META-INF вместо WEB-INF
  2. В beans.xml мне пришлось изменить bean-discovery-mode с«аннотированный» для «всех».
  3. Я забыл добавить класс с аннотацией @FacesConfig(version = Version.JSF_2_3) (чтобы включить разрешение EL для bean-компонентов CDI).
  4. Также забыл изменить версию faces-config.xml на 2.3
...