2015-06-04 2 views
1

Когда я создаю веб-приложение с нуля и добавлю jsf-api-2.2.11.jar и jsf-impl-2.2.11.jar в pom.xml (добавьте их в путь к классам приложений) и разверните его в Tomcat 7, JSf инициализируется автоматически:Как предотвратить автоматическую инициализацию JSF?

INFO [j.e.r.w.j.config] - Mojarra 2.2.11 (20150505-0732 https://svn.java.net/svn/mojarra~svn/tags/[email protected]) ..... initialized. 

в более старых версиях, которые я использовал, чтобы запустить его declarativly, определив его в web.xml (слушателю + сервлета). Поэтому я уже прокомментировал их и установил «metadata-complete» в «true» (это даже останавливает сканирование классов?), Но оно по-прежнему загружается.

В этом случае я не хочу, чтобы он загружался, оставив Jars в пути к классам и, то есть, face-config.xml в web-inf.

Что еще вызывает инициализацию?

ответ

2

Он загружается через сервлет 3.0 ServletContainerInitializer реализация в JAR-файле реализации JSF (в случае Mojarra это com.sun.faces.config.FacesInitializer). Он автоматически зарегистрирует FacesServlet по шаблонам URL *.jsf, *.faces и /faces/* (JSF 2.3 добавит *.xhtml в список шаблонов URL-адресов). Последние реализации JSF 2.1 и все реализации JSF 2.2 будут использоваться при развертывании в совместимом с Servlet 3.0 контейнере. Подробную информацию об этом новом сервлете 3.0 ServletContainerInitializer вещь, голова к этому ответу: ServletContainerInitializer vs ServletContextListener.

Правильный способ остановить это - удалить реализацию JSF из зависимостей (обратите внимание, что вам также не нужно удалять API JSF). Вы, кажется, не используете его каким-либо образом. В конце концов, правильно разработанное веб-приложение не должно иметь каких-либо специфических зависимостей JSF-реализации. Я только удивляюсь, почему именно вы оставите API JSF? Использование сторонней JSF-библиотеки для целей, не связанных с JSF? Это может указывать и заканчиваться другими (архитектурными) проблемами.

Другим способом остановить его является понижение вашего веб-приложения до Servlet 2.5, нацеленного путем редактирования корневой декларации <web-app> в web.xml соответственно для соответствия этой версии. Но у этого есть много других побочных эффектов, которые могут быть нежелательными, когда целью является разработка совместимого с Servlet 3.0 веб-приложения.


«слушатель» вы имеете в виду на самом деле не нужно, это только как обойти багги контейнеры с ошибками синхронизации в разборе TLD файлы, такие как ранние v3 и Jetty версии GlassFish. См. Также a.o. Configuration of com.sun.faces.config.ConfigureListener.

+0

Хорошо для первого пункта, хотя мне действительно не нравится, когда мое приложение настраивается автоматически, из-за структуры пути к классам. Для второй точки я удалил impl. Это помогло, но я хочу оставить api, потому что часть приложения Ithe Jsf не должна удаляться. Я хотел бы переключиться между JSF и различными интерфейсами пользовательского интерфейса, используя конфигурацию. – Stefan

+0

ОК, конечный пользователь должен затем предоставить сам JSF-имплант, что, в конце концов, является гораздо лучшей идеей в этой конструкции. – BalusC

+0

Работает, спасибо большое! – Stefan