Registering a Custom Component
In addition to registering custom renderers (as explained in the preceding section), you also must register the custom components that are usually associated with the custom renderers.
Here is the
component
element from the application configuration resource file that registersAreaComponent
:<component> <component-type>DemoArea</component-type> <component-class> components.AreaComponent </component-class> <property> <property-name>alt</property-name> <property-class>java.lang.String</property-class> </property> <property> <property-name>coords</property-name> <property-class>java.lang.String</property-class> </property> <property> <property-name>shape</property-name> <property-class>java.lang.String</property-class> </property> <component-extension> <component-family>Area</component-family> <renderer-type>DemoArea</renderer-type> </component-extension> </component>The
component-type
element indicates the name under which the component should be registered. Other objects referring to this component use this name. For example, thecomponent-type
element in the configuration forAreaComponent
defines a value ofDemoArea
, which matches the value returned by theAreaTag
class'sgetComponentType
method.The
component-class
element indicates the fully qualified class name of the component. Theproperty
elements specify the component properties and their types.If the custom component can include facets, you can configure the facets in the component configuration using
facet
elements, which are allowed after thecomponent-class
elements. See Registering a Custom Renderer with a Render Kit for further details on configuring facets.The
component-extension
element identifies a component family and a renderer type. The component family represents a component or set of components that a renderer can render. The renderer type specifies the renderer that can render the components included in the component family.The component family specified by the
component-family
element must match that returned by the components'getFamily
methods. Therenderer-type
must match that returned by the tag handler'sgetRendererType
method. By using the component family and renderer type to look up renderers for components, the JavaServer Faces implementation allows a component to be rendered by multiple renderers and allows a renderer to render multiple components.