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