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

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

Составные компоненты

JavaServer Faces предлагает концепцию составных компонентов с Facelets. Составной компонент — это специальный тип шаблона, который действует как компонент.

Любой компонент — это, по сути, фрагмент кода, который можно использовать многократно и который ведет себя определённым образом. Например, компонент ввода принимает пользовательский ввод. С компонентом также могут быть связаны валидаторы, конвертеры и слушатели для выполнения определённых действий.

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

С помощью Facelets любая страница XHTML, содержащая теги разметки и другие компоненты, может быть конвертирована в составной компонент. Используя ресурсы, составной компонент может храниться в библиотеке, которая доступна приложению из определённого местоположения.

Таблица 8-3 перечисляет наиболее часто используемые составные теги и их функции.

Таблица 8-3. Составные теги компонентов

Тег

Функция

composite:interface

Объявляет контракт на использование составного компонента. Составной компонент может использоваться как отдельный компонент, набор функций которого представляет собой объединение функций, объявленных контрактом на использование.

composite:implementation

Определяет реализацию составного компонента. Если появляется элемент composite:interface, должен быть соответствующий ему элемент composite:implementation.

composite:attribute

Объявляет атрибут, который может быть задан объекту составного компонента, в котором объявлен этот тег.

composite:insertChildren

Любые дочерние компоненты или текст шаблона в теге составного компонента на странице использования будут переопределены в составном компоненте в точке, указанной размещением этого тега в разделе composite:implementation.

composite:valueHolder

Объявляет, что составной компонент, чей контракт объявлен composite:interface, в который вложен этот элемент, предоставляет реализацию ValueHolder, подходящую для использования в качестве цели для прикреплённых объектов на используемой странице.

composite:editableValueHolder

Объявляет, что составной компонент, чей контракт объявлен composite:interface, в который вложен этот элемент, предоставляет реализацию EditableValueHolder, подходящую для использования в качестве цели присоединяемых объектов на используемой странице.

composite:actionSource

Объявляет, что составной компонент, чей контракт объявлен composite:interface, в который вложен этот элемент, предоставляет реализацию ActionSource2, подходящую для использования в качестве цели присоединяемых объектов на используемой странице.

Для получения дополнительной информации и полного списка составных тегов Facelets см. документацию библиотеки тегов Facelet JavaServer Faces.

В следующем примере показан составной компонент, который принимает на вход адрес электронной почты:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:composite="http://xmlns.jcp.org/jsf/composite"
  xmlns:h="http://xmlns.jcp.org/jsf/html">

    <h:head>
        <title>This content will not be displayed</title>
    </h:head>
    <h:body>
        <composite:interface>
            <composite:attribute name="value" required="false"/>
        </composite:interface>

        <composite:implementation>
            <h:outputLabel value="Email id: "></h:outputLabel>
            <h:inputText value="#{cc.attrs.value}"></h:inputText>
        </composite:implementation>
    </h:body>
</html>

Обратите внимание на использование cc.attrs.value при определении значения компонента inputText. Слово cc в JavaServer Faces является зарезервированным словом для составных компонентов. Выражение #{cc.attrs.`attribute-name`} используется для доступа к атрибутам, определённым для интерфейса составного компонента, который в этом случае оказывается value.

Содержимое предыдущего примера хранится в виде файла email.xhtml в каталоге resources/emcomp корневого каталога веб-приложения. JavaServer Faces считает этот каталог библиотекой, и компонент может быть доступен из такой библиотеки. Для получения дополнительной информации о ресурсах см. Веб-ресурсы.

Веб-страница, которая использует этот составной компонент, обычно называется страницей использования. Страница использования включает ссылку на составной компонент в объявлениях пространства имён xml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:em="http://xmlns.jcp.org/jsf/composite/emcomp">

    <h:head>
        <title>Using a sample composite component</title>
    </h:head>

    <body>
        <h:form>
            <em:email value="Enter your email id" />
        </h:form>
    </body>
</html>

Локальная библиотека составных компонентов определяется в пространстве имён xmlns с объявлением xmlns:em="http://xmlns.jcp.org/jsf/composite/emcomp". Доступ к самому компоненту осуществляется через тег em:email. Содержимое предыдущего примера можно сохранить как веб-страницу с именем emuserpage.xhtml в корневом веб-каталоге. При компиляции и развёртывании на сервере доступ к нему можно получить по следующему URL:

http://localhost:8080/application-name/emuserpage.xhtml

См. главу 14 «Составные компоненты: дополнительные разделы и пример» для получения дополнительной информации и примера.


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