Упаковка шаблонов JSF - PullRequest
       28

Упаковка шаблонов JSF

12 голосов
/ 15 февраля 2012

Как всегда, я немного запутался.

Здесь 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 Ответ

20 голосов
/ 28 февраля 2012

Композиции 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 является наиболее надежным подходом.

...