Public base class for markup
element instances that map to UIComponent instances in the
view.

Instances of this class are
created and passed to TagHandlerDelegateFactory.createComponentHandlerDelegate(javax.faces.view.facelets.ComponentHandler) when a tag
corresponding to this particular component is encountered in a
Facelet view. A custom tag handler for a component, converter,
validator, or behavior must extend from this class. In this way,
this instance acts as a delegate for the implementation private tag
handler. Such a subclass may choose to override as many or as few
methods from this base class as desired. If the subclass wants to
completely override the action of the implementation specific tag for
which this component is the delegate, it must override the
apply() method and make it take the following actions,
in this order. These actions must only happen the first time
this facelet is applied for each user. Subsequent applications must
take no action.

The UIComponent represented by this
element is created with the appropriate
Application.createComponent() method.

Each attribute specified in the markup is correctly
applied to the component instance, as specified in the VDLDocs
for this element.

A common use case for extending this class is to gain access to
the process by which the Facelets runtime creates component instances
corresponding to markup in a Facelets view. These three methods are
useful in such cases.

To control the instantiation of the UIComponent
instance, subclasses may override createComponent(javax.faces.view.facelets.FaceletContext). If
this method is not overridden, the tag handler for which this
instance is the delegate will take the necessary action to
instantiate the UIComponent.

getComponentConfig

createComponent

Subclasses that wish to take over
the task of instantiating the UIComponent instance
corresponding to this tag handler my override this method to do
so. A null return from this method will cause the
TagHandlerDelegate for instance to create the
component instead.