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