Ответ 1
Композиции Facelets (так что просто *.xhtml
страницы, шаблоны и включенные файлы) разрешаются ExternalContext#getResource()
, который делегирует ServletContext#getResource()
. Для этого требуется контейнер, совместимый с Servlet 3.x, потому что /WEB-INF/lib/*.jar!/META-INF/resources
разрешается с нового сервлета 3.0. Если вы еще не на Servlet 3.x или хотите поместить эти JAR в другое место по какой-либо причине, вам нужно будет создать пользовательский ResourceResolver
. См. Также Как создать модульное приложение JSF 2.0?
Составные компоненты Facelets и статические ресурсы (поэтому компоненты <cc:xxx>
и ресурсы CSS/JS/image, которые должны быть загружены <h:outputStylesheet>
, <h:outputScript>
и <h:graphicImage>
), разрешены из класса class ClassLoader#getResource()
. Чтобы включить JAR файл в сканирование классов JSF, вам необходимо включить JSF 2.x-совместимый faces-config.xml
файл в папку /META-INF
файла JAR. Эта же история относится к @ManagedBean
, @FacesValidator
, @FacesConverter
, @FacesComponent
и другим артефактам JSF.
При разработке в Eclipse вы можете выбрать Web > Web Fragment Project для создания такого модуля. Он не сильно отличается от обычного Java-проекта, ожидая, что он будет неявно включать фасет JavaScript и целевое время выполнения, автозарегистрировать файл /META-INF/web-fragment.xml
и связать его с существующим динамическим веб-проектом, добавив себя в качестве сборки развертывания для этого проекта.
Вы также можете использовать существующий стандартный Java-проект с правильной структурой папок. Папка /META-INF
должна находиться в исходной папке Java. Файл web-fragment.xml
, кстати, необязателен. Вам просто нужно вручную добавить проект Java в раздел "Развертывание развертывания" основных свойств веб-проекта. Сделайте не добавьте его в качестве другого проекта в разделе "Путь к проекту".
Когда вы (вручную) создаете JAR файл из него, вам нужно убедиться, что записи в каталоге добавлены в JAR, иначе композиции Facelets не могут быть разрешены. Если вы создаете инструменты сборки, такие как Eclipse/ Ant/Maven/etc, это также необходимо учитывать. Если это не поддается контролю, пользовательский ResourceResolver
является самым надежным подходом.