Упаковка шаблонов JSF
Как всегда, я немного запутался.
Здесь https://community.jboss.org/wiki/ModularWebAppsWithJSF2 я узнал, что это легко и работает из коробки, чтобы связать шаблоны в отдельные банки, начиная с JSF 2.0.
Единственная проблема: я не могу заставить его работать. Я просто развертываю "page.xhtml" во всех версиях (каталог META-INF, каталог ресурсов, root, с и без лиц face-config.xml) в банке, которая включена в веб-приложение WEB-INF/lib, и запрашиваю что-то как http://host/demo/faces/page.xhtml или сделать "включить" или "украсить" в шаблоне. Я получаю исключение.
Здесь Java EE6> Упаковка фасетов JSF (xhtml) и ManagedBeans в качестве JAR, мой любимый учитель JSF объясняет, как использовать собственный ResourceResolver для выполнения именно этого. Поскольку я отлаживал разрешение ресурса, я не сомневаюсь, что это сработает и попробует.
Это вопрос о механике - в чем разница между двумя подходами?
Какие именно ресурсы ищутся в META-INF/resources автоматически?
1 ответ
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, вам необходимо включить JSF 2.x-совместимый faces-config.xml
файл в /META-INF
папка файла JAR. Та же история относится к @ManagedBean
, @FacesValidator
, @FacesConverter
, @FacesComponent
и другие артефакты JSF.
При разработке в Eclipse вы можете выбрать " Веб"> "Проект веб-фрагмента", чтобы создать такой проект модуля. Он не сильно отличается от обычного Java-проекта, ожидайте, что он будет неявно включать фасет JavaScript и целевую среду выполнения, автоматически создавать /META-INF/web-fragment.xml
файл и связать его с существующим динамическим веб-проектом, добавив себя в качестве сборки развертывания в этот проект.
Вы также можете использовать существующий стандартный проект Java с подготовленной правильной структурой папок. /META-INF
папка должна идти в исходной папке Java. web-fragment.xml
Файл, кстати, не является обязательным. Вам просто нужно вручную добавить проект Java в раздел " Сборка развертывания " основных свойств веб-проекта. Не добавляйте его как другой проект в раздел пути проекта.
При создании (вручную) файла JAR из него необходимо убедиться, что записи каталога добавлены в JAR, в противном случае композиции Facelets не могут быть разрешены. Если вы собираете с помощью инструментов сборки, таких как Eclipse/Ant/Maven/ и т. Д., Это также необходимо учитывать. Если это не контролируется, пользовательский ResourceResolver
это самый надежный подход.