To use a custom tag, you declare it in a Tag Library Descriptor (TLD).
The TLD file defines how the custom tag is used in a JavaServer Faces
page. The web container uses the TLD to validate the tag. The set of
tags that are part of the HTML render kit are defined in the HTML_BASIC
TLD, available in the oJavaServer Faces standard HTML tag
library.
The TLD file name must end with taglib.xml. In the Duke’s Bookstore
case study, the custom tags area and map are defined in the file
web/WEB-INF/bookstore.taglib.xml.
All tag definitions must be nested inside the facelet-taglib element
in the TLD. Each tag is defined by a tag element. Here are the tag
definitions for the area and map components:
<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>
The component-type element specifies the name defined in the
@FacesComponent annotation, and the renderer-type element specifies
the rendererType defined in the @FacesRenderer annotation.
The facelet-taglib element must also include a namespace element,
which defines the namespace to be specified in pages that use the custom
component. See Using a Custom Component
for information on specifying the namespace in pages.
The TLD file is located in the WEB-INF directory. In addition, an
entry is included in the web deployment descriptor (web.xml) to
identify the custom tag library descriptor file, as follows:
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/bookstore.taglib.xml</param-value>
</context-param>