Чтобы использовать кастомный компонент на странице, нужно добавить на страницу его тег.
Как описано в Определение тега кастомного компонента в дескрипторе библиотеки тегов, вы должны убедиться, что TLD, который определяет любые кастомные теги, упакован в приложение, если вы собираетесь использовать теги на своих страницах. Файлы TLD хранятся в каталоге WEB-INF/
или подкаталоге файла WAR или в каталоге META-INF/
или подкаталоге библиотеки тегов, упакованной в файл JAR.
Вам также необходимо включить объявление пространства имён на страницу, чтобы страница имела доступ к тегам. Кастомные теги для примера Duke's Bookstore определены в bookstore.taglib.xml
. Тег ui:composition
на странице index.xhtml
объявляет пространство имён, определённое в библиотеке тегов:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:bookstore="http://dukesbookstore"
template="./bookstoreTemplate.xhtml">
Наконец, чтобы использовать кастомный компонент на странице, вы добавляете на страницу его тег.
Пример Duke's Bookstore включает в себя кастомный компонент карты изображения на странице index.xhtml
. Этот компонент позволяет выбрать книгу, нажав на область карты изображения:
...
<h:graphicImage id="mapImage"
name="book_all.jpg"
library="images
alt="#{bundle.chooseLocale}"
usemap="#bookMap" />
<bookstore:map id="bookMap"
current="map1"
immediate="true"
action="bookstore">
<f:actionListener
type="javaeetutorial.dukesbookstore.listeners.MapBookChangeListener" />
<bookstore:area id="map1" value="#{Book201}"
onmouseover="resources/images/book_201.jpg"
onmouseout="resources/images/book_all.jpg"
targetImage="mapImage" />
...
<bookstore:area id="map6" value="#{Book207}"
onmouseover="resources/images/book_207.jpg"
onmouseout="resources/images//book_all.jpg"
targetImage="mapImage" />
</bookstore:map>
Стандартный тег h:graphicImage
связывает изображение (book_all.jpg
) с картой изображения, на которую ссылается значение атрибута usemap
.
Кастомный тег bookstore:map
, представляющий кастомный компонент MapComponent
, задаёт карту изображения и содержит набор тегов bookstore:area
. Каждый кастомный тег bookstore:area
представляет кастомный тег AreaComponent
и указывает область карты изображения.
На странице атрибуты onmouseover
и onmouseout
определяют изображение, которое отображается, когда пользователь выполняет действия, описанные атрибутами. Кастомный отрисовщик также отображает атрибут onclick
.
На отображаемой HTML-странице атрибуты onmouseover
, onmouseout
и onclick
определяют, какой код JavaScript выполняется при возникновении этих событий. Когда пользователь наводит указатель мыши на область, функция onmouseover
отображает карту с выделенной областью. Когда пользователь перемещает мышь за пределы области, функция onmouseout
отображает исходное изображение. Когда пользователь кликает на области, функция onclick
устанавливает значение идентификатора выбранной области для скрытого тега input
и отправляет страницу.
Когда кастомный отрисовщик отображает эти атрибуты в HTML, он также отображает код JavaScript. Кастомный отрисовщик также отображает весь атрибут onclick
, а не позволяет автору страницы установить его.
Кастомный отрисовщик, который отображает тег HTML map
, также отображает скрытый компонент input
, который содержит текущую область. Серверные объекты получают значение скрытого поля input
и задают локаль в объекте FacesContext
в соответствии с выбранной областью.