Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Контракты библиотеки ресурсов

Контракты с библиотеками ресурсов позволяют вам определять различный внешний вид для разных частей одного или нескольких приложений, вместо того, чтобы либо использовать один и тот же внешний вид для всех, либо указывать разный внешний вид для каждой страницы.

Для этого вы создаёте раздел 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

Пример hello1-rlc изменяет простой пример hello1 из Веб-модуля с использованием JavaServer Faces: пример hello1 для использования двух контрактов библиотеки ресурсов. На каждой из двух страниц приложения используются разные контракты.

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

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В меню «Файл» выберите «Открыть проект».

  3. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/web/jsf
  4. Выберите каталог hello1-rlc.

  5. Нажмите Открыть проект.

  6. На вкладке «Проекты» кликните правой кнопкой мыши проект hello1-rlc и выберите «Сборка».

    Эта команда собирает приложение и развёртывает его в GlassFish Server.

Сборка, упаковка и развёртывание hello1-rlc с помощью Maven

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В окне терминала перейдите в:

    tut-install/examples/web/jsf/hello1-rlc/
  3. Введите следующую команду:

    mvn install

    Эта команда собирает и упаковывает приложение в WAR-файл hello1-rlc.war, который находится в каталоге target. Затем он развёртывается в GlassFish Server.

Запуск hello1-rlc

  1. Введите следующий URL в браузере:

    http://localhost:8080/hello1-rlc
  2. Страница greeting.xhtml выглядит так же, как страница из hello1, за исключением цвета фона и графики.

  3. В текстовом поле введите своё имя и нажмите «Отправить».

  4. Страница ответов также выглядит точно так же, как страница из hello1, за исключением её цвета фона и графики.

    На странице отображается имя, которое вы отправили. Нажмите Назад, чтобы вернуться на страницу greeting.xhtml.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)