Чтобы использовать кастомный тег, вы объявляете его в дескрипторе библиотеки тегов (TLD). Файл TLD определяет, как кастомный тег используется на странице JavaServer Faces. Веб-контейнер использует TLD для валидации тега. Набор тегов, являющихся частью инструментария отрисовки HTML, определён в TLD HTML_BASIC, доступном в стандартной библиотеке тегов HTML JavaServer Faces.
Имя файла TLD должно заканчиваться на taglib.xml. В примере Duke's Bookstore кастомные теги area и map определены в файле web/WEB-INF/bookstore.taglib.xml ,
Все определения тегов должны быть вложены в элемент facelet-taglib в TLD. Каждый тег определяется элементом tag. Вот определения тегов для компонентов area и map:
<facelet-taglib xmlns="http://xmlns.jcp.org/xml/ns/javaee"
...>
<namespace>http://dukesbookstore</namespace>
<tag>
<tag-name>area</tag-name>
<component>
<component-type>DemoArea</component-type>
<renderer-type>DemoArea</renderer-type>
</component>
</tag>
<tag>
<tag-name>map</tag-name>
<component>
<component-type>DemoMap</component-type>
<renderer-type>DemoMap</renderer-type>
</component>
</tag>
</facelet-taglib>
Элемент component-type указывает имя, определённое в аннотации @FacesComponent, а элемент renderer-type определяет rendererType, определеный в аннотации @FacesRenderer.
Элемент facelet-taglib также должен включать элемент namespace, который определяет пространство имён, которое должно быть указано на страницах, использующих кастомный компонент. См. Использование кастомного компонента для получения информации об указании пространства имён на страницах.
Файл TLD находится в каталоге WEB-INF. Кроме того, в дескриптор развёртывания (web.xml) включена запись для идентификации файла дескриптора библиотеки кастомных тегов следующим образом:
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/bookstore.taglib.xml</param-value>
</context-param>