Нужны ли сегодня Faces-config.xml и web.xml?

Я изучал JavaEE8 и практиковался в некоторых проектах, разбираясь в новых технологиях, таких как Servlet 4.0 и JSF 2.3. Прочитал на многих форумах и страницах, на некоторых вижу, что говорят, что web.xml и faces-config.xml не нужны, т.к. сейчас используются аннотации, а на некоторых продолжают их использовать.

В каких случаях следует продолжать использовать дескриптор веб-развертывания->web.xml и файл ресурсов конфигурации приложения->faces-config.xml?


person David Ferreira    schedule 24.05.2018    source источник
comment
Я лично всегда использую web.xml и Faces-config.xml и помещаю самые последние версии в «заголовок», но не добавляю туда какие-либо конкретные конфигурации, если я просто использую значения по умолчанию. В тех случаях, когда вы не хотите использовать значения по умолчанию (например, запускаете приложение в режиме разработки JSF), вы добавляете туда нужные вещи. Но имейте в виду, что МНОГИЕ «учебники» являются древними (не совсем неправильными, но и не современными).   -  person Kukeltje    schedule 24.05.2018
comment
Связанный дубликат всесторонне решает вопрос о том, когда использовать faces-config.xml, но даже не упоминает другую часть этого вопроса: В каких случаях следует продолжать использовать веб-развертывание Дескриптор-›web.xml.   -  person skomisa    schedule 28.08.2019


Ответы (2)


Они не обязательны, но я настоятельно рекомендую их использовать, так как они вам рано или поздно понадобятся для дополнительной настройки.

Аннотации используются для повышения удобочитаемости и упрощения faces-config.xml и web.xml, однако они даже близко не учитывают параметры конфигурации, которые можно сделать в файлах конфигурации. Например, вы можете использовать аннотацию @FacesValidator вместо объявления и ссылки на соответствующий класс в faces-config.xml.

Задача, которую нельзя решить с помощью аннотаций, — это объявление страницы приветствия. Если вы хотите указать его, вам нужен файл web.xml.

person SCPhantom    schedule 27.05.2018

Я обнаружил определенную проблему в реализации JSF 2.3 в Mojarra при использовании файла web.xml или faces-config.xml. В коде этой реализации класс ELUtils имеет следующее условие:

if (getFacesConfigXmlVersion(facesContext).equals("2.3") || getWebXmlVersion(facesContext).equals("4.0")) {
                throw new FacesException("Unable to find CDI BeanManager");
}

который выдает исключение: «Невозможно найти CID BeanManager». У меня был только файл faces-config.xml с последней версией JSF, указанной в пространстве имен, и я выдавал это исключение.

Чтобы избежать этой проблемы, вы можете указать другую версию JSF (до 2.3) в файле faces-config.xml и указать другую версию файла web.xml (до 4.0) или просто не добавлять ни один из этих файлов конфигурации. В моем случае я удалил faces-config.xml и без проблем запустил приложение.

Я надеюсь, что реализация Mojarra решит эту маленькую деталь.

person David Ferreira    schedule 27.05.2018
comment
Это все еще проблема в последней версии Mojarra? - person Kukeltje; 27.05.2018
comment
Да, я пытался использовать последнюю версию Mojarra: 2.4.0. - person David Ferreira; 29.05.2018
comment
github.com/javaserverfaces/mojarra/issues/4264 - person Kukeltje; 29.05.2018
comment
Это ТОЛЬКО происходит при использовании аннотаций @MangedBean. Если вы используете CDI @Named, вы не получите эту ошибку. (проверено с wildfly 18) - person Kukeltje; 10.01.2020