Конфигурация com.sun.faces.config.ConfigureListener

Я просматриваю текущий проект JSF, в котором конфигурация web.xml содержит:

  • FacesServlet (настроен на *.xhtml)
  • com.sun.faces.config.ConfigureListener

Я использую реализацию JSF 2.2 и Mojarra.

Меня смущает ConfigureListener. Нужен ли этот класс в конфигурации? Какова цель этого класса? Я не смог найти никакой информации, а в классе почти нет javadoc.

Если я удалю эту конфигурацию, все будет работать так же. Таким образом, я предполагаю, что ConfigureListener можно или нужно удалить, но я не уверен.


person LaurentG    schedule 28.11.2013    source источник
comment
Найдите этот coderanch.com/t/428264. /JSF/java/   -  person Developer Marius Žilėnas    schedule 28.11.2013


Ответы (1)


ConfigureListener обычно автоматически регистрируется через /META-INF/jsf_core.tld файл JAR-файла реализации Mojarra. Кроме того, ConfigureListener явно зарегистрирован через Servlet 3.0 ServletContainerInitializer, чтобы обойти старую ошибку GlassFish v3 (примечание: v3, а не 3.0.x, таким образом, это действительно первая версия GF3).

Бывают ситуации, когда автоматической регистрации через файл .tld недостаточно. Наиболее известным является развертывание веб-приложения на Jetty. Это подробно объясняется в этом разделе вопросов и ответов: не удалось найти Factory: javax. Faces.context.FacesContextFactory.

Кроме того, как упоминалось ранее и в этом подробном ответе, в GlassFish v3 есть ошибка, из-за которой файл TLD сканируется слишком поздно, и поэтому JSF не может выполнить необходимую инициализацию в нужный момент. Затем вам нужно будет явно зарегистрировать ConfigureListener в файле web.xml веб-приложения.

Но если это работает для вас, когда оно явно не зарегистрировано в web.xml, просто держите его подальше. Чем меньше шума в web.xml тем лучше. Но если вам случится развернуться в контейнере, чувствительном к упомянутой проблеме (поэтому, когда ваше веб-приложение на самом деле является общедоступным и у вас нет контроля над выбором целевого контейнера), вам лучше оставить его «на случай». тот".


Обновление: похоже, что Tomcat 8.x показывает ошибочное поведение, когда эта запись включена в web.xml: этот прослушиватель будет фактически выполняться дважды, а не только один раз. Последствие катастрофическое: помимо прочего, все прослушиватели событий JSF будут зарегистрированы дважды, а библиотеки компонентов будут загружены дважды. Это приводит только к конфликтам во время выполнения. Другими словами, при развертывании на Tomcat убедитесь, что эта запись удалена из web.xml.

person BalusC    schedule 28.11.2013
comment
Спасибо за ответ. Я понял, что FacesServlet на самом деле настроен на /*.xhtml. Я обновил вопрос. - person LaurentG; 28.11.2013
comment
Пожалуйста. Я бы перепроверил это. Это именно неправильный синтаксис. Я обновил Q с правильным. - person BalusC; 28.11.2013
comment
Вы правы (опять же). Извините, я слишком быстро проверил. У меня *.xhtml. - person LaurentG; 28.11.2013
comment
С ICEFaces 3.3.0 и tomcat ›= 7.0.42 объявление этого прослушивателя в web.xml приводит к тому, что определенный компонент icefaces добавляется дважды с одним и тем же идентификатором на каждой странице, что вызывает ошибку. См. это сообщение на форуме: icesoft.org/JForum/posts/list/22121.page - person Gaetan; 02.06.2015
comment
Я могу подтвердить, что такое же ошибочное поведение, когда прослушиватель конфигурации создается дважды, также происходит в WebLogic 12.2.1.3. Удаление прослушивателя из web.xml решает эту проблему. - person Luciano van der Veekens; 16.11.2017