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.