Перенос управляемых компонентов JSF в управляемые компоненты CDI

Я планирую преобразовать веб-приложение с использованием управляемого компонента JSF в управляемые компоненты CDI. Я знаю, что мне нужно сделать ниже:

  1. Добавьте пустой файл beans.xml в WEB-INF.
  2. Замените все JSF @ManagedBean на аннотации CDI @Named.
  3. Замените все аннотации областей JSF аннотациями областей CDI или OmniFaces.
  4. Замените все JSF @ManagedProperty на аннотации CDI @Inject.

Это все, что нужно сделать? Есть ли какие-то ошибки, о которых мне нужно знать?

7 голосов | спросил HockChai Lim 22 MarpmTue, 22 Mar 2016 16:18:00 +03002016-03-22T16:18:00+03:0004 2016, 16:18:00

1 ответ


0

По сути, это действительно все, что вам нужно сделать, если вы уже находитесь на сервере Java EE. На Tomcat сначала нужно вручную установить CDI. Инструкции для сварки и OpenWebBeans подробно описаны в блоге Как установить CDI в Tomcat?

Нужно позаботиться о следующих проблемах:

  • Хотя OmniFaces 2.x «официально» требует JSF 2.2, OmniFaces 2.0 /2.1 технически обратно совместима с JSF 2.1 и должна в случае TomEE работать и на TomEE 1.x с JSF 2.1, но OmniFaces 2.2 имеет жесткая зависимость JSF 2.2 (из-за нового тега <o:viewAction>) и не будет развернута на TomEE 1.x без обновления его реализации JSF MyFaces до версии, совместимой с 2.2, или само обновление до TomEE 7.x. См. Также Матрица совместимости OmniFaces .

  • При развертывании EAR с несколькими WAR-файлами с каждой собственной библиотекой OmniFaces, как правило, все функции CDI будут работать только в одной WAR-файле, поскольку контекст CDI библиотеки, предоставляемой WAR, неправильно интерпретируется как EAR-широкий. Это упущение в спецификации CDI, но оно должно быть исправлено в будущей версии CDI. См. Также Известные проблемы OmniFaces (CDI) .

  • Когда вы хотите использовать предоставляемую OmniFaces поддержку внедрения CDI в @FacesConverter или @FacesValidator, и вы собираетесь создать /использовать CDI 1.1-совместимый beans.xml ( и, следовательно, не совместимый с CDI 1.0 или пустой), вам нужно убедиться, что вы явно указали bean-discovery-mode="all" в beans.xml. См. Также @FacesConverter витрина. .

  • При замене @ManagedBean(eager=true) имейте в виду, что стандарт CDI для этого не имеет эквивалента. OmniFaces предлагает @Eager аннотация для этой цели.

  • При замене @ManagedProperty помните, что вы не можете ввести #{param.xxx}, #{cookie.xxx} и #{initParam.xxx} напрямую через @Inject, в то время как это было возможно только через @ManagedProperty. OmniFaces предлагает соответственно @Param , @Cookie и @ContextParam для этой цели.

ответил BalusC 22 MarpmTue, 22 Mar 2016 18:17:46 +03002016-03-22T18:17:46+03:0006 2016, 18:17:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132