JSF и CDI с бобами

Я использую Java EE 6 на JBoss EAP 6, и мои bean-компоненты JSF помечены так:@ManagedBean @ViewScoped (оба из javax.faces.bean пакет)

Однако они также являются компонентами CDI (конструктор по умолчанию, использование @Inject, @PreDestroy так далее). Я все время читаю, что вы не можете смешивать эти аннотации (JSF и CDI), но это, очевидно, работает нормально: инъекции работают, preDestroy вызывается при изменении вида и т. Д.).

Я что-то пропустил? В чем проблема? Почему бы не использовать?

1 ответ

Решение

CDI @Inject работает "везде" и, следовательно, также внутри JSF @ManagedBean, Коллега JSF @ManagedProperty работает внутри @ManagedBean только. Вы также не можете @Inject настоящий управляемый компонент JSF в любом управляемом компоненте CDI (вместо этого это будет управляемый экземпляр CDI). Возможно, это то, о чем вы читали. Однако, по общему мнению, желательно не смешивать их, чтобы избежать путаницы среди начинающих. Библиотека утилит JSF OmniFaces имеет CDI-совместимый @ViewScoped для JSF 2.0/2.1.

@PreDestroy кстати, не специфичен для CDI, равно как и его аналог @PostConstruct, Они должны прекрасно работать как с управляемыми компонентами CDI, так и с управляемыми компонентами JSF.

Другие вопросы по тегам