Контракты с библиотеками ресурсов позволяют вам определять различный внешний вид для разных частей одного или нескольких приложений, вместо того, чтобы либо использовать один и тот же внешний вид для всех, либо указывать разный внешний вид для каждой страницы.
Для этого вы создаёте раздел contracts
вашего веб-приложения. В разделе contracts
вы можете указать любое количество именованных областей, каждая из которых называется контрактом. В каждом контракте вы можете указать ресурсы, такие как файлы шаблонов, таблиц стилей, JavaScript и изображения.
Например, можно указать два контракта c1
и c2
, каждый из которых использует шаблон и другие файлы:
src/main/webapp
WEB-INF/
contracts
c1
template.xhtml
style.css
myImg.gif
myJS.js
c2
template.xhtml
style2.css
img2.gif
JS2.js
index.xhtml
...
Одна часть приложения может использовать c1
, а другая — c2
.
Другой вариант использования контрактов — указать один контракт, который содержит несколько шаблонов:
src/main/webapp
contracts
myContract
template1.xhtml
template2.xhtml
style.css
img.png
img2.png
Контракт библиотеки ресурсов можно упаковать в JAR-файл для повторного использования в различных приложениях. Если вы это сделаете, контракты должны находиться в META-INF/contracts
. Затем вы можете поместить файл JAR в каталог WEB-INF/lib
приложения. Это означает, что приложение будет организовано следующим образом:
src/main/webapp/
WEB-INF/lib/myContract.jar
...
Вы можете указать использование контракта в файле faces-config.xml
приложения в элементе resource-library-contracts
. Однако можно использовать этот элемент только если приложение использует более одного контракта.
Приложение hello1-rlc
Managed-бин для hello1-rlc
— Hello.java
— идентичен Managed-бину для hello1
(за исключением того, что он заменяет @Named
и @RequestScoped
аннотации с @Model
).
Исходный код для этого приложения находится в каталоге tut-install/examples/web/jsf/hello1-rlc/
.
Здесь рассматриваются следующие темы:
Настройка hello1-rlc
Файл faces-config.xml
для примера hello1-rlc
содержит следующие элементы:
<resource-library-contracts>
<contract-mapping>
<url-pattern>/reply/*</url-pattern>
<contracts>reply</contracts>
</contract-mapping>
<contract-mapping>
<url-pattern>*</url-pattern>
<contracts>hello</contracts>
</contract-mapping>
</resource-library-contracts>
Элементы contract-mapping
в элементе resource-library-contracts
назначают каждому контракту различный набор страниц. Один контракт с именем reply
используется для всех страниц в области reply
приложения (/reply/*
). Другой контракт, hello
, используется для всех остальных страниц приложения (*
).
Приложение организовано следующим образом:
hello1-rlc
pom.xml
src/main/java/javaeetutorial/hello1rlc/Hello.java
src/main/webapp
WEB-INF
faces-config.xml
web.xml
contracts
hello
default.css
duke.handsOnHips.gif
template.xhtml
reply
default.css
duke.thumbsup.gif
template.xhtml
reply
response.xhtml
greeting.xhtml
В файле web.xml
указан welcome-file
как greeting.xhtml
. Поскольку он не находится в src/main/webapp/reply
, эта страница Facelets использует контракт hello
, тогда как src/main/webapp/reply/response.xhtml
использует контракт reply
.
Страницы Facelets для hello1-rlc
Страницы greeting.xhtml
и response.xhtml
имеют идентичный код, вызываемый в их шаблонах
<ui:composition template="/template.xhtml">
Файлы template.xhtml
в контрактах hello
и reply
имеют только два отличия: в тексте заголовка title
(«Hello Template» и «Reply Template») и изображении, которое указано для каждого из них.
Таблицы стилей default.css
в двух контрактах отличаются только цветом фона, указанном для элемента body
.
Сборка, упаковка и развёртывание hello1-rlc в IDE NetBeans
-
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
-
В меню «Файл» выберите «Открыть проект».
-
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/web/jsf
-
Выберите каталог hello1-rlc
.
-
Нажмите Открыть проект.
-
На вкладке «Проекты» кликните правой кнопкой мыши проект hello1-rlc
и выберите «Сборка».
Эта команда собирает приложение и развёртывает его в GlassFish Server.
Сборка, упаковка и развёртывание hello1-rlc с помощью Maven
-
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
-
В окне терминала перейдите в:
tut-install/examples/web/jsf/hello1-rlc/
-
Введите следующую команду:
Эта команда собирает и упаковывает приложение в WAR-файл hello1-rlc.war
, который находится в каталоге target
. Затем он развёртывается в GlassFish Server.
Запуск hello1-rlc
-
Введите следующий URL в браузере:
http://localhost:8080/hello1-rlc
-
Страница greeting.xhtml
выглядит так же, как страница из hello1
, за исключением цвета фона и графики.
-
В текстовом поле введите своё имя и нажмите «Отправить».
-
Страница ответов также выглядит точно так же, как страница из hello1
, за исключением её цвета фона и графики.
На странице отображается имя, которое вы отправили. Нажмите Назад, чтобы вернуться на страницу greeting.xhtml
.