- All Implemented Interfaces:
PartialStateHolder
,StateHolder
,TransientStateHolder
,ComponentSystemEventListener
,FacesListener
,SystemEventListenerHolder
,EventListener
- Direct Known Subclasses:
BehaviorHolderWrapper
,UIComponentBase
UIComponent is the base class for all user interface components in Jakarta Server
Faces. The set of UIComponent
instances associated with a particular request and response are organized into
a component tree under a UIViewRoot
that represents the entire content of the request or response.
For the convenience of component developers, UIComponentBase
provides the default behavior that is specified
for a UIComponent
, and is the base class for all of the concrete UIComponent
"base" implementations.
Component writers are encouraged to subclass UIComponentBase
, instead of directly implementing this abstract
class, to reduce the impact of any future changes to the method signatures.
If the ListenerFor
annotation is attached to the class definition of a
Component
, that class must also implement ComponentSystemEventListener
.
Dynamically modifying the component tree can happen at any time, during and after restoring the view, but not during state saving and needs to function properly with respect to rendering and state saving
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
This constant enables one to quickly discover the names of the declared composite component attributes that have been given default values by the composite component author.static final String
The value of this constant is used as the key in the component attribute map, the value for which is ajava.beans.BeanInfo
implementation describing the composite component.static final String
The value of this constant is used as the key in the composite component BeanDescriptor for aValueExpression
that evaluates to thecomponent-type
of the composite component rootUIComponent
for this composite component, if one was declared by the composite component author.static final String
The value of this constant is used as the key in theMap
returned as described inFACETS_KEY
for thePropertyDescriptor
describing the composite component facet.static final String
The value of this constant is used as the key in the composite component BeanDescriptor for theMap<PropertyDescriptor>
that contains meta-information for the declared facets for this composite component.static final String
The value of this constant is used as the key in the component attributesMap
for theLocation
in the view at which this component instance resides. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected abstract void
addFacesListener
(FacesListener listener) Add the specifiedFacesListener
to the set of listeners registered to receive event notifications from thisUIComponent
.abstract void
broadcast
(FacesEvent event) Broadcast the specifiedFacesEvent
to all registered event listeners who have expressed an interest in events of this type.void
An implementation ofPartialStateHolder.clearInitialState()
, this method is called by the runtime to tell the instance to stop tracking state changes.abstract void
decode
(FacesContext context) Decode any new state of thisUIComponent
from the request contained in the specifiedFacesContext
, and store this state as needed.void
encodeAll
(FacesContext context) If this component returnstrue
fromisRendered()
, take the following action.abstract void
encodeBegin
(FacesContext context) If ourrendered
property istrue
, render the beginning of the current state of thisUIComponent
to the response contained in the specifiedFacesContext
.abstract void
encodeChildren
(FacesContext context) abstract void
encodeEnd
(FacesContext context) abstract UIComponent
findComponent
(String expr) Search for and return theUIComponent
with anid
that matches the specified search expression (if any), according to the algorithm described below.Return a mutableMap
representing the attributes (and properties, see below) associated wth thisUIComponent
, keyed by attribute name (which must be a String).abstract int
Return the number of childUIComponent
s that are associated with thisUIComponent
.abstract List
<UIComponent> Enable Jakarta Expression Language to access theclientId
of a component.abstract String
getClientId
(FacesContext context) Return a client-side identifier for this component, generating one if necessary.static UIComponent
getCompositeComponentParent
(UIComponent component) Finds the nearest composite component parent of the specified component.getContainerClientId
(FacesContext context) Allow components that implementNamingContainer
to selectively disable prepending their clientId to their descendent's clientIds by breaking the prepending logic into a separately callable method.static UIComponent
getCurrentComponent
(FacesContext context) Return theUIComponent
instance that is currently processing.static UIComponent
getCurrentCompositeComponent
(FacesContext context) Return the closest ancestor component, relative to the component returned fromgetCurrentComponent(jakarta.faces.context.FacesContext)
, that is a composite component, ornull
if no such component exists.protected abstract FacesContext
Convenience method to return theFacesContext
instance for the current request.protected abstract FacesListener[]
getFacesListeners
(Class clazz) Return an array of registeredFacesListener
s that are instances of the specified class.abstract UIComponent
Convenience method to return the named facet, if it exists, ornull
otherwise.int
Return the number of facetUIComponent
s that are associated with thisUIComponent
.abstract Map
<String, UIComponent> Return a mutableMap
representing the facetUIComponent
s associated with thisUIComponent
, keyed by facet name (which must be a String).abstract Iterator
<UIComponent> abstract String
Return the identifier of the component family to which this component belongs.abstract String
getId()
Return the component identifier of thisUIComponent
.getListenersForEventClass
(Class<? extends SystemEvent> eventClass) This implementation throwsUnsupportedOperationException
and is provided for the sole purpose of not breaking existing applications that extend this class.Starting with "this", return the closest component in the ancestry that is aNamingContainer
ornull
if none can be found.abstract UIComponent
Return the parentUIComponent
of thisUIComponent
, if any.This is a convenience method that simply callsgetPassThroughAttributes(boolean)
, passingtrue
as the argument.getPassThroughAttributes
(boolean create) This method has the same specification asgetPassThroughAttributes()
except that it is allowed to returnnull
if and only if the argumentcreate
isfalse
and no pass through attribute data structure exists for this instance.protected abstract Renderer
getRenderer
(FacesContext context) Convenience method to return theRenderer
instance associated with this component, if any; otherwise, returnnull
.abstract String
Return theRenderer
type for thisUIComponent
(if any).abstract boolean
Return a flag indicating whether this component is responsible for rendering its child components.Return aMap<String,String>
of theResourceBundle
for this component.protected StateHelper
Return theStateHelper
instance used to help this component implementPartialStateHolder
.protected StateHelper
getStateHelper
(boolean create) Return theTransientStateHelper
instance for thisUIComponent
instance.getTransientStateHelper
(boolean create) Return theTransientStateHelper
instance for thisUIComponent
instance.getValueExpression
(String name) Return theValueExpression
used to calculate the value for the specified attribute or property name, if any.boolean
An implementation ofPartialStateHolder.initialStateMarked()
, this method is called by the runtime to test if thePartialStateHolder.markInitialState()
method was called.boolean
invokeOnComponent
(FacesContext context, String clientId, ContextCallback callback) Starting at this component in the View hierarchy, search for a component with aclientId
equal to the argumentclientId
and, if found, call theContextCallback.invokeContextCallback(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
method on the argumentcallback
, passing the currentFacesContext
and the found component as arguments.static boolean
isCompositeComponent
(UIComponent component) Returntrue
ifcomponent
is a composite component, otherwisefalse
.boolean
isInView()
Returntrue
if this component is within the view hierarchy otherwisefalse
abstract boolean
Returntrue
if this component (and its children) should be rendered during the Render Response phase of the request processing lifecycle.protected boolean
isVisitable
(VisitContext context) Returntrue
if this component should be visited,false
otherwise.void
An implementation ofPartialStateHolder.markInitialState()
, this method is called by the runtime to indicate that the instance should start tracking changes to its state.void
popComponentFromEL
(FacesContext context) Pop the currentUIComponent
from theFacesContext
attributes map so that the previousUIComponent
, if any, becomes the current component.abstract void
processDecodes
(FacesContext context) Perform the component tree processing required by the Apply Request Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.void
processEvent
(ComponentSystemEvent event) The default implementation performs the following action.abstract void
processRestoreState
(FacesContext context, Object state) Perform the component tree processing required by the Restore View phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.abstract Object
processSaveState
(FacesContext context) Perform the component tree processing required by the state saving portion of the Render Response phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.abstract void
processUpdates
(FacesContext context) Perform the component tree processing required by the Update Model Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.abstract void
processValidators
(FacesContext context) Perform the component tree processing required by the Process Validations phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.void
pushComponentToEL
(FacesContext context, UIComponent component) Push the currentUIComponent
this
to theFacesContext
attribute map saving the previousUIComponent
for a subsequent call topopComponentFromEL(jakarta.faces.context.FacesContext)
.abstract void
queueEvent
(FacesEvent event) Queue an event for broadcast at the end of the current request processing lifecycle phase.protected abstract void
removeFacesListener
(FacesListener listener) Remove the specifiedFacesListener
from the set of listeners registered to receive event notifications from thisUIComponent
.void
restoreTransientState
(FacesContext context, Object state) For components that need to support the concept of transient state, this method will restore any state saved on a prior call tosaveTransientState(jakarta.faces.context.FacesContext)
.saveTransientState
(FacesContext context) For components that need to support the concept of transient state, this method will save any state that is known to be transient in nature.abstract void
Set the component identifier of thisUIComponent
(if any).void
setInView
(boolean isInView) Updates the status as to whether or not this component is currently within the view hierarchy.abstract void
setParent
(UIComponent parent) Set the parentUIComponent
of thisUIComponent
.abstract void
setRendered
(boolean rendered) Set therendered
property of thisUIComponent
.abstract void
setRendererType
(String rendererType) void
setValueExpression
(String name, ValueExpression binding) Set theValueExpression
used to calculate the value for the specified attribute or property name, if any.void
subscribeToEvent
(Class<? extends SystemEvent> eventClass, ComponentSystemEventListener componentListener) This implementation throwsUnsupportedOperationException
and is provided for the sole purpose of not breaking existing applications that extend this class.void
unsubscribeFromEvent
(Class<? extends SystemEvent> eventClass, ComponentSystemEventListener componentListener) This implementation throwsUnsupportedOperationException
and is provided for the sole purpose of not breaking existing applications that extend this class.boolean
visitTree
(VisitContext visitContext, VisitCallback callback) Perform a tree visit starting at this node in the tree.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface jakarta.faces.component.StateHolder
isTransient, restoreState, saveState, setTransient
-
Field Details
-
BEANINFO_KEY
The value of this constant is used as the key in the component attribute map, the value for which is a
java.beans.BeanInfo
implementation describing the composite component. ThisBeanInfo
is known as the composite component BeanInfo.- Since:
- 2.0
- See Also:
-
FACETS_KEY
The value of this constant is used as the key in the composite component BeanDescriptor for the
Map<PropertyDescriptor>
that contains meta-information for the declared facets for this composite component. This map must contain an entry under the keyCOMPOSITE_FACET_NAME
, even if no facets were explicitly declared. SeeCOMPOSITE_FACET_NAME
.- Since:
- 2.0
- See Also:
-
VIEW_LOCATION_KEY
-
COMPOSITE_COMPONENT_TYPE_KEY
The value of this constant is used as the key in the composite component BeanDescriptor for a
ValueExpression
that evaluates to thecomponent-type
of the composite component rootUIComponent
for this composite component, if one was declared by the composite component author.- Since:
- 2.0
- See Also:
-
COMPOSITE_FACET_NAME
The value of this constant is used as the key in the
Map
returned as described inFACETS_KEY
for thePropertyDescriptor
describing the composite component facet. The value of this constant is also used as the key in theMap
returned fromgetFacets()
. In this case, it refers to the actual facet that is theUIPanel
that is the parent of the all of the components in the<composite:implementation>
section of the composite component VDL file.- Since:
- 2.0
- See Also:
-
ATTRS_WITH_DECLARED_DEFAULT_VALUES
This constant enables one to quickly discover the names of the declared composite component attributes that have been given default values by the composite component author. The information is exposed as a
Collection<String>
returned from thegetValue()
method on the composite component BeanDescriptor, when this constant is passed as the argument.- Since:
- 2.1
- See Also:
-
-
Constructor Details
-
UIComponent
public UIComponent()
-
-
Method Details
-
getAttributes
Return a mutable
Map
representing the attributes (and properties, see below) associated wth thisUIComponent
, keyed by attribute name (which must be a String). The returned implementation must support all of the standard and optionalMap
methods, plus support the following additional requirements:- The
Map
implementation must implement thejava.io.Serializable
interface. - Any attempt to add a
null
key or value must throw aNullPointerException
. - Any attempt to add a key that is not a String must throw a
ClassCastException
. - If the attribute name specified as a key matches a property of this
UIComponent
's implementation class, the following methods will have special behavior:containsKey
- Returnfalse
.get()
- If the property is readable, call the getter method and return the returned value (wrapping primitive values in their corresponding wrapper classes); otherwise throwIllegalArgumentException
.put()
- If the property is writeable, call the setter method to set the corresponding value (unwrapping primitive values in their corresponding wrapper classes). If the property is not writeable, or an attempt is made to set a property of primitive type tonull
, throwIllegalArgumentException
.remove
- ThrowIllegalArgumentException
.
- Returns:
- the component attribute map.
- The
-
getPassThroughAttributes
This is a convenience method that simply calls
getPassThroughAttributes(boolean)
, passingtrue
as the argument. This method must never returnnull
.- Returns:
- the pass-through attribute map.
- Since:
- 2.2
-
getPassThroughAttributes
This method has the same specification as
getPassThroughAttributes()
except that it is allowed to returnnull
if and only if the argumentcreate
isfalse
and no pass through attribute data structure exists for this instance. The returnedMap
implementation must support all of the standard and optionalMap
methods, plus support the following additional requirements. The map must be stored in usinggetStateHelper()
.The
Map
implementation must implementjava.io.Serializable
.Any attempt to add a
null
key or value must throw aNullPointerException
.Any attempt to add a key that is not a
String
must throw anIllegalArgumentException
.For backward compatibility with components that extend directly from this class, a default implementation is provided that returns the empty map.
- Parameters:
create
- iftrue
, a newMap
instance will be created if it does not exist already. Iffalse
, and there is no existingMap
instance, one will not be created andnull
will be returned.- Returns:
- A
Map
instance, ornull
. - Since:
- 2.2
-
getValueExpression
Return the
ValueExpression
used to calculate the value for the specified attribute or property name, if any.This method must be overridden and implemented for components that comply with Jakarta Faces 1.2 and later.
- Parameters:
name
- Name of the attribute or property for which to retrieve aValueExpression
- Returns:
- the value expression, or
null
. - Throws:
NullPointerException
- ifname
isnull
- Since:
- 1.2
-
setValueExpression
Set the
ValueExpression
used to calculate the value for the specified attribute or property name, if any.The implementation must call
Expression.isLiteralText()
on the argumentexpression
. IfisLiteralText()
returnstrue
, invokeValueExpression.getValue(jakarta.el.ELContext)
on the argument expression and pass the result as thevalue
parameter in a call tothis.
wheregetAttributes()
.put(name, value)name
is the argumentname
. If an exception is thrown as a result of callingValueExpression.getValue(jakarta.el.ELContext)
, wrap it in aFacesException
and re-throw it. IfisLiteralText()
returnsfalse
, simply store the un-evaluatedexpression
argument in the collection ofValueExpression
s under the key given by the argumentname
.This method must be overridden and implemented for components that comply with Jakarta Faces 1.2 and later.
- Parameters:
name
- Name of the attribute or property for which to set aValueExpression
binding
- TheValueExpression
to set, ornull
to remove any currently setValueExpression
- Throws:
IllegalArgumentException
- ifname
is one ofid
orparent
NullPointerException
- ifname
isnull
- Since:
- 1.2
-
markInitialState
public void markInitialState()An implementation of
PartialStateHolder.markInitialState()
, this method is called by the runtime to indicate that the instance should start tracking changes to its state.- Specified by:
markInitialState
in interfacePartialStateHolder
- Since:
- 2.0
-
initialStateMarked
public boolean initialStateMarked()An implementation of
PartialStateHolder.initialStateMarked()
, this method is called by the runtime to test if thePartialStateHolder.markInitialState()
method was called.- Specified by:
initialStateMarked
in interfacePartialStateHolder
- Returns:
true
if the initial state is marked,false
otherwise.- Since:
- 2.0
-
clearInitialState
public void clearInitialState()An implementation of
PartialStateHolder.clearInitialState()
, this method is called by the runtime to tell the instance to stop tracking state changes.- Specified by:
clearInitialState
in interfacePartialStateHolder
- Since:
- 2.0
-
getStateHelper
Return the
StateHelper
instance used to help this component implementPartialStateHolder
.- Returns:
- the state helper.
- Since:
- 2.0
-
getStateHelper
Like
getStateHelper()
, but only create a state helper instance if the argumentcreat
istrue
.- Parameters:
create
- iftrue
, a newStateHelper
instance will be created if it does not exist already. Iffalse
, and there is no existingStateHelper
instance, one will not be created andnull
will be returned.- Returns:
- the state helper.
- Since:
- 2.0
-
getTransientStateHelper
Return the
TransientStateHelper
instance for thisUIComponent
instance. The default implementation simply calls through togetTransientStateHelper(boolean)
passingtrue
as the argument.- Returns:
- the transient state helper.
- Since:
- 2.1
-
getTransientStateHelper
Return the
TransientStateHelper
instance for thisUIComponent
instance.- Parameters:
create
- iftrue
create, if necessary, any internal data structures. Iffalse
, do not create any instances. In this case, it is possible for this method to returnnull
.- Returns:
- the transient state helper.
- Since:
- 2.1
-
restoreTransientState
For components that need to support the concept of transient state, this method will restore any state saved on a prior call to
saveTransientState(jakarta.faces.context.FacesContext)
.- Specified by:
restoreTransientState
in interfaceTransientStateHolder
- Parameters:
context
- the Faces contextstate
- the object containing transient values- Since:
- 2.1
-
saveTransientState
For components that need to support the concept of transient state, this method will save any state that is known to be transient in nature.
- Specified by:
saveTransientState
in interfaceTransientStateHolder
- Parameters:
context
- the Faces context.- Returns:
- object containing transient values
- Since:
- 2.1
-
isInView
public boolean isInView()Return
true
if this component is within the view hierarchy otherwisefalse
- Returns:
true
if within a view hierarchy,false
otherwise.- Since:
- 2.0
-
setInView
public void setInView(boolean isInView) Updates the status as to whether or not this component is currently within the view hierarchy. This method must never be called by developers; a
UIComponent
's internal implementation will call it as components are added to or removed from a parent's childList
or facetMap
.- Parameters:
isInView
- flag indicating whether or not this component is within the view hierachy- Since:
- 2.0
-
getClientId
Enable Jakarta Expression Language to access the
clientId
of a component. This is particularly useful in combination with thecomponent
andcc
implicit objects. A default implementation is provided that simply callsFacesContext.getCurrentInstance()
and then calls through togetClientId(FacesContext)
.- Returns:
- the client id.
- Since:
- 2.0
-
getClientId
Return a client-side identifier for this component, generating one if necessary. The associated
Renderer
, if any, will be asked to convert the clientId to a form suitable for transmission to the client.The return from this method must be the same value throughout the lifetime of the instance, unless the
id
property of the component is changed, or the component is placed in aNamingContainer
whose client ID changes (for example,UIData
). However, even in these cases, consecutive calls to this method must always return the same value. The implementation must follow these steps in determining the clientId:Find the closest ancestor to this component in the view hierarchy that implements
NamingContainer
. CallgetContainerClientId()
on it and save the result as theparentId
local variable. CallgetId()
on this component and save the result as themyId
local variable. IfmyId
isnull
, callcontext.getViewRoot().createUniqueId()
and assign the result to myId. IfparentId
is non-null
, letmyId
equalparentId +
. CallUINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)
+ myIdRenderer.convertClientId(jakarta.faces.context.FacesContext, java.lang.String)
, passingmyId
, and return the result.- Parameters:
context
- TheFacesContext
for the current request- Returns:
- the client id.
- Throws:
NullPointerException
- ifcontext
isnull
-
getContainerClientId
Allow components that implement
NamingContainer
to selectively disable prepending their clientId to their descendent's clientIds by breaking the prepending logic into a separately callable method. SeegetClientId()
for usage.By default, this method will call through to
getClientId()
and return the result.- Parameters:
context
- the Faces context.- Returns:
- the container client id.
- Throws:
NullPointerException
- ifcontext
isnull
- Since:
- 1.2
-
getFamily
Return the identifier of the component family to which this component belongs. This identifier, in conjunction with the value of the
rendererType
property, may be used to select the appropriateRenderer
for this component instance. Note this method should NOT returnnull
- Returns:
- the component family (not null).
-
getId
Return the component identifier of this
UIComponent
.- Returns:
- the component identifier.
-
setId
Set the component identifier of this
UIComponent
(if any). Component identifiers must obey the following syntax restrictions:- Must not be a zero-length String.
- First character must be a letter or an underscore ('_').
- Subsequent characters must be a letter, a digit, an underscore ('_'), or a dash ('-').
Component identifiers must also obey the following semantic restrictions (note that this restriction is NOT enforced by the
setId()
implementation):- The specified identifier must be unique among all the components (including facets) that are descendents of the
nearest ancestor
UIComponent
that is aNamingContainer
, or within the scope of the entire component tree if there is no such ancestor that is aNamingContainer
.
- Parameters:
id
- The new component identifier, ornull
to indicate that thisUIComponent
does not have a component identifier- Throws:
IllegalArgumentException
- ifid
is not syntactically valid
-
getParent
Return the parent
UIComponent
of thisUIComponent
, if any. A component must allow child components to be added to and removed from the list of children of this component, even though the child component returns null fromgetParent( )
.- Returns:
- the parent component.
-
setParent
Set the parent
UIComponent
of thisUIComponent
. Ifparent.isInView()
returnstrue
, calling this method will first cause aPreRemoveFromViewEvent
to be published, for this node, and then the children of this node. Then, once the re-parenting has occurred, aPostAddToViewEvent
will be published as well, first for this node, and then for the node's children, but only if any of the following conditions are true.-
FacesContext.getCurrentPhaseId()
returnsPhaseId.RESTORE_VIEW
and partial state saving is enabled. -
FacesContext.isPostback()
returnsfalse
andFacesContext.getCurrentPhaseId()
returns something other thanPhaseId.RESTORE_VIEW
This method must never be called by developers; a
UIComponent
's internal implementation will call it as components are added to or removed from a parent's childList
or facetMap
.- Parameters:
parent
- The new parent, ornull
for the root node of a component tree
-
-
isRendered
public abstract boolean isRendered()Return
true
if this component (and its children) should be rendered during the Render Response phase of the request processing lifecycle.- Returns:
true
if the component should be rendered,false
otherwise.
-
setRendered
public abstract void setRendered(boolean rendered) Set the
rendered
property of thisUIComponent
.- Parameters:
rendered
- Iftrue
render this component; otherwise, do not render this component
-
getRendererType
Return the
Renderer
type for thisUIComponent
(if any).- Returns:
- the renderer type.
-
setRendererType
Set the
Renderer
type for thisUIComponent
, ornull
for components that render themselves.- Parameters:
rendererType
- Logical identifier of the type ofRenderer
to use, ornull
for components that render themselves
-
getRendersChildren
public abstract boolean getRendersChildren()Return a flag indicating whether this component is responsible for rendering its child components. The default implementation in
UIComponentBase.getRendersChildren()
tries to find the renderer for this component. If it does, it callsRenderer.getRendersChildren()
and returns the result. If it doesn't, it returns false. As of version 1.2 of the Jakarta Faces Specification, component authors are encouraged to returntrue
from this method and rely onUIComponentBase.encodeChildren(jakarta.faces.context.FacesContext)
.- Returns:
true
if the component renders its children,false
otherwise.
-
getResourceBundleMap
Return a
Map<String,String>
of theResourceBundle
for this component. A component may have aResourceBundle
associated with it. This bundle may contain localized properties relating to instances of this component. The default implementation first looks for aResourceBundle
with a base name equal to the fully qualified class name of the currentUIComponent this
andLocale
equal to theLocale
of the currentUIViewRoot
. If no such bundle is found, and the component is a composite component, let resourceName be the resourceName of theResource
for this composite component, replacing the file extension with ".properties". Let libraryName be the libraryName of the theResource
for this composite component. CallResourceHandler.createResource(java.lang.String,java.lang.String)
, passing the derived resourceName and libraryName. Note that this will automatically allow for the localization of theResourceBundle
due to the localization facility implemented increateResource
, which is specified in section 2.6.1.3 "Resource Identifiers" of the Jakarta Faces Specification Document. If the resultantResource
exists and can be found, theInputStream
for the resource is used to create aResourceBundle
. If either of the two previous steps for obtaining theResourceBundle
for this component is successful, theResourceBundle
is wrapped in aMap<String,String>
and returned. OtherwiseCollections.EMPTY_MAP
is returned.- Returns:
- the resource bundle map.
- Since:
- 2.0
-
getChildren
Return a mutable
List
representing the childUIComponent
s associated with this component. The returned implementation must support all of the standard and optionalList
methods, plus support the following additional requirements:- The
List
implementation must implement thejava.io.Serializable
interface. - Any attempt to add a
null
must throw a NullPointerException - Any attempt to add an object that does not implement
UIComponent
must throw a ClassCastException. - Whenever a new child component is added, the
parent
property of the child must be set to this component instance. If theparent
property of the child was already non-null, the child must first be removed from its previous parent (where it may have been either a child or a facet). - Whenever an existing child component is removed, the
parent
property of the child must be set tonull
. -
After the child component has been added to the view,
Application.publishEvent(jakarta.faces.context.FacesContext, java.lang.Class<? extends jakarta.faces.event.SystemEvent>, java.lang.Object)
must be called, passingPostAddToViewEvent
.class
as the first argument and the newly added component as the second argument if any the following cases are true.-
FacesContext.getCurrentPhaseId()
returnsPhaseId.RESTORE_VIEW
and partial state saving is enabled. -
FacesContext.isPostback()
returnsfalse
andFacesContext.getCurrentPhaseId()
returns something other thanPhaseId.RESTORE_VIEW
-
- Returns:
- the list of children.
- The
-
getChildCount
public abstract int getChildCount()Return the number of child
UIComponent
s that are associated with thisUIComponent
. If there are no children, this method must return 0. The method must not cause the creation of a child component list.- Returns:
- the number of child components.
-
findComponent
Search for and return the
UIComponent
with anid
that matches the specified search expression (if any), according to the algorithm described below.WARNING: The found
UIComponent
instance, if any, is returned without regard for its tree traversal context. Retrieving an Jakarta Expression Language-bound attribute from the component is not safe. Jakarta Expression Language expressions can contain implicit objects, such as#{component}
, which assume they are being evaluated within the scope of a tree traversal context. Evaluating expressions with these kinds of implicit objects outside of a tree traversal context produces undefined results. SeeinvokeOnComponent(jakarta.faces.context.FacesContext, java.lang.String, jakarta.faces.component.ContextCallback)
for a method that does correctly account for the tree traversal context when operating on the foundUIComponent
instance.invokeOnComponent(jakarta.faces.context.FacesContext, java.lang.String, jakarta.faces.component.ContextCallback)
is also useful to find components given a simpleclientId
.Component identifiers are required to be unique within the scope of the closest ancestor
NamingContainer
that encloses this component (which might be this component itself). If there are noNamingContainer
components in the ancestry of this component, the root component in the tree is treated as if it were aNamingContainer
, whether or not its class actually implements theNamingContainer
interface.A search expression consists of either an identifier (which is matched exactly against the
id
property of aUIComponent
, or a series of such identifiers linked by theUINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)
character value. The search algorithm should operates as follows, though alternate alogrithms may be used as long as the end result is the same:- Identify the
UIComponent
that will be the base for searching, by stopping as soon as one of the following conditions is met:- If the search expression begins with the the separator character (called an "absolute" search expression), the
base will be the root
UIComponent
of the component tree. The leading separator character will be stripped off, and the remainder of the search expression will be treated as a "relative" search expression as described below. - Otherwise, if this
UIComponent
is aNamingContainer
it will serve as the basis. - Otherwise, search up the parents of this component. If a
NamingContainer
is encountered, it will be the base. - Otherwise (if no
NamingContainer
is encountered) the rootUIComponent
will be the base.
- If the search expression begins with the the separator character (called an "absolute" search expression), the
base will be the root
- The search expression (possibly modified in the previous step) is now a "relative" search expression that will be
used to locate the component (if any) that has an
id
that matches, within the scope of the base component. The match is performed as follows:- If the search expression is a simple identifier, this value is compared to the
id
property, and then recursively through the facets and children of the baseUIComponent
(except that if a descendantNamingContainer
is found, its own facets and children are not searched). - If the search expression includes more than one identifier separated by the separator character, the first
identifier is used to locate a
NamingContainer
by the rules in the previous bullet point. Then, thefindComponent()
method of thisNamingContainer
will be called, passing the remainder of the search expression.
- If the search expression is a simple identifier, this value is compared to the
- Parameters:
expr
- Search expression identifying theUIComponent
to be returned- Returns:
- the found
UIComponent
, ornull
if the component was not found. - Throws:
IllegalArgumentException
- if an intermediate identifier in a search expression identifies aUIComponent
that is not aNamingContainer
NullPointerException
- ifexpr
isnull
- Identify the
-
invokeOnComponent
public boolean invokeOnComponent(FacesContext context, String clientId, ContextCallback callback) throws FacesException Starting at this component in the View hierarchy, search for a component with a
clientId
equal to the argumentclientId
and, if found, call theContextCallback.invokeContextCallback(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
method on the argumentcallback
, passing the currentFacesContext
and the found component as arguments. This method is similar tofindComponent(java.lang.String)
but it does not support the leadingUINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)
syntax for searching from the root of the View.The default implementation will first check if
this.getClientId()
is equal to the argumentclientId
. If so, first callpushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
, then call theContextCallback.invokeContextCallback(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
method on the argument callback, passing through theFacesContext
argument and passing this as the component argument. Then callpopComponentFromEL(jakarta.faces.context.FacesContext)
. If anException
is thrown by the callback, wrap it in aFacesException
and re-throw it. Otherwise, returntrue
.Otherwise, for each component returned by
getFacetsAndChildren()
, callinvokeOnComponent()
passing the arguments to this method, in order. The first timeinvokeOnComponent()
returns true, abort traversing the rest of theIterator
and returntrue
.When calling
ContextCallback.invokeContextCallback(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
the implementation of this method must guarantee that the state of the component passed to the callback correctly reflects the component's position in the View hierarchy with respect to any state found in the argumentclientId
. For example, an iterating component such asUIData
will need to set its row index to correctly reflect the argumentclientId
before finding the appropriate child component backed by the correct row. When the callback returns, either normally or by throwing anException
the implementation of this method must restore the state of the view to the way it was before invoking the callback.If none of the elements from
getFacetsAndChildren()
returnedtrue
frominvokeOnComponent()
, returnfalse
.Simple usage example to find a component by
clientId
.private UIComponent found = null; private void doFind(FacesContext context, String clientId) { context.getViewRoot().invokeOnComponent(context, clientId, new ContextCallback() { public void invokeContextCallback(FacesContext context, UIComponent component) { found = component; } }); }
- Parameters:
context
- theFacesContext
for the current requestclientId
- the client identifier of the component to be passed to the argument callback.callback
- an implementation of the Callback interface.- Returns:
true
if the a component with the givenclientId
is found, the callback method was successfully invoked passing that component as an argument, and no Exception was thrown. Returnsfalse
if no component with the givenclientId
is found.- Throws:
NullPointerException
- if any of the arguments are nullFacesException
- if the argument Callback throws an Exception, it is wrapped in aFacesException
and re-thrown.- Since:
- 1.2
-
getFacets
Return a mutable
Map
representing the facetUIComponent
s associated with thisUIComponent
, keyed by facet name (which must be a String). The returned implementation must support all of the standard and optionalMap
methods, plus support the following additional requirements:- The
Map
implementation must implement thejava.io.Serializable
interface. - Any attempt to add a
null
key or value must throw a NullPointerException. - Any attempt to add a key that is not a String must throw a ClassCastException.
- Any attempt to add a value that is not a
UIComponent
must throw a ClassCastException. - Whenever a new facet
UIComponent
is added:- The
parent
property of the component must be set to this component instance. - If the
parent
property of the component was already non-null, the component must first be removed from its previous parent (where it may have been either a child or a facet).
- The
- Whenever an existing facet
UIComponent
is removed:- The
parent
property of the facet must be set tonull
.
- The
- Returns:
- the map of facets.
- The
-
getFacetCount
public int getFacetCount()Return the number of facet
UIComponent
s that are associated with thisUIComponent
. If there are no facets, this method must return 0. The method must not cause the creation of a facet component map.For backwards compatability with classes that extend UIComponent directly, a default implementation is provided that simply calls
getFacets()
and then calls thesize()
method on the returnedMap
. A more optimized version of this method is provided inUIComponentBase.getFacetCount()
.- Returns:
- the number of facets.
- Since:
- 1.2
-
getFacet
Convenience method to return the named facet, if it exists, or
null
otherwise. If the requested facet does not exist, the facets Map must not be created.- Parameters:
name
- Name of the desired facet- Returns:
- the component, or
null
.
-
getFacetsAndChildren
Return an
Iterator
over the facet followed by childUIComponent
s of thisUIComponent
. Facets are returned in an undefined order, followed by all the children in the order they are stored in the child list. If this component has no facets or children, an emptyIterator
is returned.The returned
Iterator
must not support theremove()
operation.- Returns:
- the facets and children iterator.
-
broadcast
Broadcast the specified
FacesEvent
to all registered event listeners who have expressed an interest in events of this type. Listeners are called in the order in which they were added.If the
event
is an instance ofBehaviorEvent
and the currentcomponent
is the source of theevent
callBehaviorEvent.getBehavior()
to get theBehavior
for the event. CallBehavior.broadcast(jakarta.faces.event.BehaviorEvent)
on theBehavior
instance.- Parameters:
event
- TheFacesEvent
to be broadcast- Throws:
AbortProcessingException
- Signal the Jakarta Faces implementation that no further processing on the current event should be performedIllegalArgumentException
- if the implementation class of thisFacesEvent
is not supported by this componentNullPointerException
- ifevent
isnull
-
decode
Decode any new state of this
UIComponent
from the request contained in the specifiedFacesContext
, and store this state as needed.During decoding, events may be enqueued for later processing (by event listeners who have registered an interest), by calling
queueEvent()
.- Parameters:
context
-FacesContext
for the request we are processing- Throws:
NullPointerException
- ifcontext
isnull
-
visitTree
Perform a tree visit starting at this node in the tree.
UIComponent.visitTree() implementations do not invoke the
VisitCallback
directly, but instead callVisitContext.invokeVisitCallback(jakarta.faces.component.UIComponent, jakarta.faces.component.visit.VisitCallback)
to invoke the callback. This allowsVisitContext
implementations to provide optimized tree traversals, for example by only calling theVisitCallback
for a subset of components.UIComponent.visitTree() implementations must call UIComponent.pushComponentToEL() before performing the visit and UIComponent.popComponentFromEL() after the visit.
- Parameters:
visitContext
- theVisitContext
for this visitcallback
- theVisitCallback
instance whosevisit
method will be called for each node visited.- Returns:
- component implementations may return
true
to indicate that the tree visit is complete (eg. all components that need to be visited have been visited). This results in the tree visit being short-circuited such that no more components are visited. - Since:
- 2.0
- See Also:
-
isVisitable
Return
true
if this component should be visited,false
otherwise. Called byUIComponent.visitTree()
to determine whether this component satisfies the hints returned byVisitContext.getHints()
.If this method returns false, the tree visited is short-circuited such that neither the component nor any of its descendents will be visited
Custom
visitTree()
implementations may call this method to determine whether the component is visitable before performing any visit-related processing.- Parameters:
context
- the Visit context.- Returns:
true
if visitable,false
otherwise.- Since:
- 2.0
-
encodeBegin
If our
rendered
property istrue
, render the beginning of the current state of thisUIComponent
to the response contained in the specifiedFacesContext
. CallpushComponentToEL(jakarta.faces.context.FacesContext,jakarta.faces.component.UIComponent)
. CallApplication.publishEvent(jakarta.faces.context.FacesContext, java.lang.Class<? extends jakarta.faces.event.SystemEvent>, java.lang.Object)
, passingPreRenderComponentEvent
.class
as the first argument and the component instance to be rendered as the second argument.If a
Renderer
is associated with thisUIComponent
, the actual encoding will be delegated toRenderer.encodeBegin(FacesContext, UIComponent)
.If our
rendered
property isfalse
, callpushComponentToEL(jakarta.faces.context.FacesContext,jakarta.faces.component.UIComponent)
and return immediately.- Parameters:
context
-FacesContext
for the response we are creating- Throws:
IOException
- if an input/output error occurs while renderingNullPointerException
- ifcontext
isnull
-
encodeChildren
If our
rendered
property istrue
, render the childUIComponent
s of thisUIComponent
. This method will only be called if therendersChildren
property istrue
.If a
Renderer
is associated with thisUIComponent
, the actual encoding will be delegated toRenderer.encodeChildren(FacesContext, UIComponent)
. If noRenderer
is associated with thisUIComponent
, iterate over each of the children of this component and callencodeAll(jakarta.faces.context.FacesContext)
.- Parameters:
context
-FacesContext
for the response we are creating- Throws:
IOException
- if an input/output error occurs while renderingNullPointerException
- ifcontext
isnull
-
encodeEnd
If our
rendered
property istrue
, render the ending of the current state of thisUIComponent
.If a
Renderer
is associated with thisUIComponent
, the actual encoding will be delegated toRenderer.encodeEnd(FacesContext, UIComponent)
.Call
popComponentFromEL(jakarta.faces.context.FacesContext)
. before returning regardless of the value of therendered
property.- Parameters:
context
-FacesContext
for the response we are creating- Throws:
IOException
- if an input/output error occurs while renderingNullPointerException
- ifcontext
isnull
-
encodeAll
If this component returns
true
fromisRendered()
, take the following action.Render this component and all its children that return
true
fromisRendered()
, regardless of the value of thegetRendersChildren()
flag.- Parameters:
context
- the Faces context.- Throws:
IOException
- if an input/output error occurs while renderingNullPointerException
- ifcontext
isnull
- Since:
- 1.2
-
pushComponentToEL
Push the current
UIComponent
this
to theFacesContext
attribute map saving the previousUIComponent
for a subsequent call topopComponentFromEL(jakarta.faces.context.FacesContext)
.This method and
popComponentFromEL()
form the basis for the contract that enables the Jakarta Expression Language Expression "#{component}
" to resolve to the "current" component that is being processed in the lifecycle. The requirements for whenpushComponentToEL()
andpopComponentFromEL()
must be called are specified as needed in the javadoc for this class.After
pushComponentToEL()
returns, a call togetCurrentComponent(jakarta.faces.context.FacesContext)
must returnthis
UIComponent
instance untilpopComponentFromEL()
is called, after which point the previousUIComponent
instance will be returned fromgetCurrentComponent()
- Parameters:
context
- theFacesContext
for the current requestcomponent
- thecomponent
to push to the EL. Ifcomponent
isnull
theUIComponent
instance that this call was invoked upon will be pushed to the EL.- Throws:
NullPointerException
- ifcontext
isnull
- Since:
- 2.0
- See Also:
-
popComponentFromEL
Pop the current
UIComponent
from theFacesContext
attributes map so that the previousUIComponent
, if any, becomes the current component.- Parameters:
context
- theFacesContext
for the current request- Throws:
NullPointerException
- ifcontext
isnull
- Since:
- 2.0
- See Also:
-
isCompositeComponent
Return
true
ifcomponent
is a composite component, otherwisefalse
.- Parameters:
component
- theUIComponent
to test- Returns:
true
if this is a composite component,false
otherwise.- Throws:
NullPointerException
- ifcomponent
isnull
- Since:
- 2.0
-
getCompositeComponentParent
Finds the nearest composite component parent of the specified component.
- Parameters:
component
- the component from which to start the search from- Returns:
- if
component
isnull
, returnnull
, otherwise search the component's parent hierachy for the nearest parent composite component. If no parent composite component is found, returnnull
- Since:
- 2.0
-
getCurrentComponent
Return the
UIComponent
instance that is currently processing. This is equivalent to evaluating the Jakarta Expression Language expression "#{component}
" and doing agetValue
operation on the resultantValueExpression
.This method must return
null
if there is no currently processingUIComponent
- Parameters:
context
-FacesContext
for the request we are processing- Returns:
- the current component, or
null
. - Throws:
NullPointerException
- ifcontext
isnull
- Since:
- 2.0
-
getCurrentCompositeComponent
Return the closest ancestor component, relative to the component returned from
getCurrentComponent(jakarta.faces.context.FacesContext)
, that is a composite component, ornull
if no such component exists.- Parameters:
context
-FacesContext
for the request we are processing- Returns:
- the current composite component, or
null
. - Throws:
NullPointerException
- ifcontext
isnull
- Since:
- 2.0
-
addFacesListener
Add the specified
FacesListener
to the set of listeners registered to receive event notifications from thisUIComponent
. It is expected thatUIComponent
classes acting as event sources will have corresponding typesafe APIs for registering listeners of the required type, and the implementation of those registration methods will delegate to this method. For example:public class FooEvent extends FacesEvent { ... } public interface FooListener extends FacesListener { public void processFoo(FooEvent event); } public class FooComponent extends UIComponentBase { ... public void addFooListener(FooListener listener) { addFacesListener(listener); } public void removeFooListener(FooListener listener) { removeFacesListener(listener); } ... }
- Parameters:
listener
- TheFacesListener
to be registered- Throws:
NullPointerException
- iflistener
isnull
-
getFacesListeners
Return an array of registered
FacesListener
s that are instances of the specified class. If there are no such registered listeners, a zero-length array is returned. The returned array can be safely be cast to an array strongly typed to an element type ofclazz
.- Parameters:
clazz
- Class that must be implemented by aFacesListener
for it to be returned- Returns:
- the Faces listeners, or a zero-length array.
- Throws:
IllegalArgumentException
- ifclass
is not, and does not implement,FacesListener
NullPointerException
- ifclazz
isnull
-
removeFacesListener
Remove the specified
FacesListener
from the set of listeners registered to receive event notifications from thisUIComponent
.- Parameters:
listener
- TheFacesListener
to be deregistered- Throws:
NullPointerException
- iflistener
isnull
-
queueEvent
Queue an event for broadcast at the end of the current request processing lifecycle phase. The default implementation in
UIComponentBase
must delegate this call to thequeueEvent()
method of the parentUIComponent
.- Parameters:
event
-FacesEvent
to be queued- Throws:
IllegalStateException
- if this component is not a descendant of aUIViewRoot
NullPointerException
- ifevent
isnull
-
subscribeToEvent
public void subscribeToEvent(Class<? extends SystemEvent> eventClass, ComponentSystemEventListener componentListener) This implementation throws
UnsupportedOperationException
and is provided for the sole purpose of not breaking existing applications that extend this class.UIComponentBase
provides the implementation of this method.- Parameters:
eventClass
- the event class.componentListener
- the listener.- Since:
- 2.1
-
unsubscribeFromEvent
public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass, ComponentSystemEventListener componentListener) This implementation throws
UnsupportedOperationException
and is provided for the sole purpose of not breaking existing applications that extend this class.UIComponentBase
provides the implementation of this method.- Parameters:
eventClass
- the event class.componentListener
- the component listener.- Since:
- 2.1
-
getListenersForEventClass
This implementation throws
UnsupportedOperationException
and is provided for the sole purpose of not breaking existing applications that extend this class.UIComponentBase
provides the implementation of this method.- Specified by:
getListenersForEventClass
in interfaceSystemEventListenerHolder
- Parameters:
eventClass
- the event class.- Returns:
- the list of listeners, never
null
. - Since:
- 2.1
-
getNamingContainer
Starting with "this", return the closest component in the ancestry that is a
NamingContainer
ornull
if none can be found.- Returns:
- the naming container, or
null
. - Since:
- 2.0
-
processRestoreState
Perform the component tree processing required by the Restore View phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- Call the
restoreState()
method of this component. - Call
pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processRestoreState()
method of all facets and children of thisUIComponent
in the order determined by a call togetFacetsAndChildren()
. After returning from theprocessRestoreState()
method on a child or facet, callpopComponentFromEL(jakarta.faces.context.FacesContext)
This method may not be called if the state saving method is set to server.
- Parameters:
context
-FacesContext
for the request we are processingstate
- the state.- Throws:
NullPointerException
- ifcontext
isnull
- Call the
-
processDecodes
Perform the component tree processing required by the Apply Request Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- If the
rendered
property of thisUIComponent
isfalse
, skip further processing. - Call
pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processDecodes()
method of all facets and children of thisUIComponent
, in the order determined by a call togetFacetsAndChildren()
. - Call the
decode()
method of this component. - Call
popComponentFromEL(jakarta.faces.context.FacesContext)
from inside of afinally block, just before returning.
- If a
RuntimeException
is thrown during decode processing, callFacesContext.renderResponse()
and re-throw the exception.
- Parameters:
context
-FacesContext
for the request we are processing- Throws:
NullPointerException
- ifcontext
isnull
- If the
-
processEvent
The default implementation performs the following action. If the argument
event
is an instance ofPostRestoreStateEvent
, callthis.
getValueExpression(java.lang.String)
passing the literal string “binding”, without the quotes, as the argument. If the result is non-null
, set the value of theValueExpression
to bethis
.- Specified by:
processEvent
in interfaceComponentSystemEventListener
- Parameters:
event
- theComponentSystemEvent
instance that is being processed.- Throws:
AbortProcessingException
- if lifecycle processing should cease for this request.
-
processValidators
Perform the component tree processing required by the Process Validations phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- If the
rendered
property of thisUIComponent
isfalse
, skip further processing. - Call
pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processValidators()
method of all facets and children of thisUIComponent
, in the order determined by a call togetFacetsAndChildren()
. - After returning from calling
getFacetsAndChildren()
callpopComponentFromEL(jakarta.faces.context.FacesContext)
.
- Parameters:
context
-FacesContext
for the request we are processing- Throws:
NullPointerException
- ifcontext
isnull
- See Also:
- If the
-
processUpdates
Perform the component tree processing required by the Update Model Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- If the
rendered
property of thisUIComponent
isfalse
, skip further processing. - Call
pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processUpdates()
method of all facets and children of thisUIComponent
, in the order determined by a call togetFacetsAndChildren()
. After returning from theprocessUpdates()
method on a child or facet, callpopComponentFromEL(jakarta.faces.context.FacesContext)
- Parameters:
context
-FacesContext
for the request we are processing- Throws:
NullPointerException
- ifcontext
isnull
- If the
-
processSaveState
Perform the component tree processing required by the state saving portion of the Render Response phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- consult the
transient
property of this component. If true, just returnnull
. - Call
pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processSaveState()
method of all facets and children of thisUIComponent
in the order determined by a call togetFacetsAndChildren()
, skipping children and facets that are transient. Ensure thatpopComponentFromEL(jakarta.faces.context.FacesContext)
is called correctly after each child or facet. - Call the
saveState()
method of this component. - Encapsulate the child state and your state into a Serializable Object and return it.
This method may not be called if the state saving method is set to server.
- Parameters:
context
-FacesContext
for the request we are processing- Returns:
- the saved state.
- Throws:
NullPointerException
- ifcontext
isnull
- consult the
-
getFacesContext
Convenience method to return the
FacesContext
instance for the current request.- Returns:
- the Faces context.
-
getRenderer
Convenience method to return the
Renderer
instance associated with this component, if any; otherwise, returnnull
.- Parameters:
context
-FacesContext
for the current request- Returns:
- the renderer, or
null
.
-