Могут ли управляемые компоненты CDI и управляемые компоненты JSF взаимодействовать друг с другом?

У меня есть веб-приложение Tomcat 6 JSF, которое я хотел бы настроить с помощью компонентов CDI. Однако мне придется постепенно конвертировать проект в CDI.

Мой вопрос: можно ли вводить компоненты CDI и традиционные управляемые компоненты JSF друг в друга?

Спасибо.


person Jon Onstott    schedule 12.10.2011    source источник


Ответы (1)


Все управляемые компоненты JSF (JMB) либо автоматически являются управляемыми компонентами CDI (CMB), либо могут быть распознаны как таковые с помощью файла маркера beans.xml. (Требования CMB очень низкие и в основном просто определяют наличие конструктора без параметров.)

Это означает, что вы должны иметь возможность использовать (читай: внедрять) все JMB практически без дополнительных усилий.

Однако возникнут проблемы, поскольку JMB используют другие области видимости, чем CMB (javax.faces.* против javax.enterprise.*).

Их лучше всего решить, зарегистрировав относительно простое CDI-расширение: когда сервер CDI (Tomcat для вас) запускается, он вызывает пару событий, которые вы можете наблюдать — это место, где вы можете обнаруживать JMB и преобразовывать их в CMB с правильным прицелом.

Но прежде чем вы начнете взламывать: все это уже было сделано Модуль Seam 3 Faces. Просто поместите его в путь к классам, и все области JSF будут связаны с областями CDI.

person jan groth    schedule 16.10.2011
comment
Интересно, проверю. Спасибо! - person Jon Onstott; 18.10.2011
comment
Да, похоже, что Seam 3 Faces объединяет управляемые компоненты JSF и компоненты CDI. - person Jon Onstott; 19.10.2011