Конфигурация com.sun.faces.config.ConfigureListener
Я рассматриваю текущий проект JSF, где web.xml
Конфигурация содержит:
- FacesServlet (настроен на
*.xhtml
) com.sun.faces.config.ConfigureListener
Я использую JSF 2.2 и реализацию Mojarra.
Я запутался в ConfigureListener
, Нужен ли этот класс в конфигурации? Какова цель этого класса? Я не мог найти никакой информации, и у класса почти нет javadoc.
Если я удаляю эту конфигурацию, все, кажется, работает так же. Таким образом, я предполагаю, что ConfigureListener
может или должен быть удален, но я не уверен.
1 ответ
ConfigureListener
обычно автоматически регистрируется через /META-INF/jsf_core.tld
файл JAR-файла реализации Mojarra. Кроме того, ConfigureListener
явно зарегистрирован через сервлет 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
,