Class UIForm
- All Implemented Interfaces:
NamingContainer
,PartialStateHolder
,StateHolder
,TransientStateHolder
,UniqueIdVendor
,ComponentSystemEventListener
,FacesListener
,SystemEventListenerHolder
,EventListener
- Direct Known Subclasses:
HtmlForm
UIForm is a UIComponent
that represents an input form to be
presented to the user, and whose child components represent (among other things) the input fields to be included when
the form is submitted.
By default, the rendererType
property must be set to "jakarta.faces.Form
". This value can
be changed by calling the setRendererType()
method.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
The standard component family for this component.static final String
The standard component type for this component.Fields inherited from class jakarta.faces.component.UIComponent
ATTRS_WITH_DECLARED_DEFAULT_VALUES, BEANINFO_KEY, bindings, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, FACETS_KEY, VIEW_LOCATION_KEY
Fields inherited from interface jakarta.faces.component.NamingContainer
SEPARATOR_CHAR
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptioncreateUniqueId
(FacesContext context, String seed) Generate an identifier for a component.getContainerClientId
(FacesContext context) Override theUIComponent.getContainerClientId(jakarta.faces.context.FacesContext)
to allow users to disable this form from prepending itsclientId
to its descendent'sclientIds
depending on the value of this form'sisPrependId()
property.Return the identifier of the component family to which this component belongs.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.boolean
Is the id prepended.boolean
Returns the current value of thesubmitted
property.void
processDecodes
(FacesContext context) OverrideUIComponent.processDecodes(jakarta.faces.context.FacesContext)
to ensure that the form is decoded before its children.void
processUpdates
(FacesContext context) OverrideUIComponent.processUpdates(jakarta.faces.context.FacesContext)
to ensure that the children of thisUIForm
instance are only processed ifisSubmitted()
returnstrue
.void
processValidators
(FacesContext context) OverrideUIComponent.processValidators(jakarta.faces.context.FacesContext)
to ensure that the children of thisUIForm
instance are only processed ifisSubmitted()
returnstrue
.void
setPrependId
(boolean prependId) Set whether the id should be prepended.void
setSubmitted
(boolean submitted) If thisUIForm
instance (as opposed to other forms in the page) is experiencing a submit during this request processing lifecycle, this method must be called, withtrue
as the argument, during theUIComponent.decode(jakarta.faces.context.FacesContext)
for thisUIForm
instance.boolean
visitTree
(VisitContext context, VisitCallback callback) Perform a tree visit starting at this node in the tree.Methods inherited from class jakarta.faces.component.UIComponentBase
addClientBehavior, addFacesListener, broadcast, clearInitialState, decode, encodeBegin, encodeChildren, encodeEnd, findComponent, getAttributes, getChildCount, getChildren, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getFacesContext, getFacesListeners, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getListenersForEventClass, getParent, getPassThroughAttributes, getRenderer, getRendererType, getRendersChildren, isRendered, isTransient, markInitialState, processRestoreState, processSaveState, queueEvent, removeFacesListener, restoreAttachedState, restoreState, saveAttachedState, saveState, setId, setParent, setRendered, setRendererType, setTransient, subscribeToEvent, unsubscribeFromEvent
Methods inherited from class jakarta.faces.component.UIComponent
encodeAll, getClientId, getCompositeComponentParent, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, setValueExpression
-
Field Details
-
COMPONENT_TYPE
The standard component type for this component.
- See Also:
-
COMPONENT_FAMILY
The standard component family for this component.
- See Also:
-
-
Constructor Details
-
UIForm
public UIForm()Create a new
UIForm
instance with default property values.
-
-
Method Details
-
getFamily
Description copied from class:UIComponent
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
- Specified by:
getFamily
in classUIComponent
- Returns:
- the component family (not null).
-
isSubmitted
public boolean isSubmitted()Returns the current value of the
submitted
property. The default value isfalse
. SeesetSubmitted(boolean)
for details.This property must be kept as a transient property using the
UIComponent.getTransientStateHelper()
.- Returns:
true
if the form was submitted,false
otherwise.
-
setSubmitted
public void setSubmitted(boolean submitted) If this
UIForm
instance (as opposed to other forms in the page) is experiencing a submit during this request processing lifecycle, this method must be called, withtrue
as the argument, during theUIComponent.decode(jakarta.faces.context.FacesContext)
for thisUIForm
instance. If thisUIForm
instance is not experiencing a submit, this method must be called, withfalse
as the argument, during theUIComponent.decode(jakarta.faces.context.FacesContext)
for thisUIForm
instance.The value of a
UIForm
's submitted property must not be saved as part of its state.This property must be kept as a transient property using the
UIComponent.getTransientStateHelper()
.- Parameters:
submitted
- the new value of the submitted flag.
-
isPrependId
public boolean isPrependId()Is the id prepended.- Returns:
true
if it is,false
otherwise.
-
setPrependId
public void setPrependId(boolean prependId) Set whether the id should be prepended.- Parameters:
prependId
-true
if it is,false
otherwise.
-
processDecodes
Override
UIComponent.processDecodes(jakarta.faces.context.FacesContext)
to ensure that the form is decoded before its children. This is necessary to allow thesubmitted
property to be correctly set.- Overrides:
processDecodes
in classUIComponentBase
- Parameters:
context
-FacesContext
for the request we are processing- Throws:
NullPointerException
- ifcontext
isnull
-
processValidators
Override
UIComponent.processValidators(jakarta.faces.context.FacesContext)
to ensure that the children of thisUIForm
instance are only processed ifisSubmitted()
returnstrue
.- Overrides:
processValidators
in classUIComponentBase
- Parameters:
context
-FacesContext
for the request we are processing- Throws:
NullPointerException
- ifcontext
isnull
- See Also:
-
processUpdates
Override
UIComponent.processUpdates(jakarta.faces.context.FacesContext)
to ensure that the children of thisUIForm
instance are only processed ifisSubmitted()
returnstrue
.- Overrides:
processUpdates
in classUIComponentBase
- Parameters:
context
-FacesContext
for the request we are processing- Throws:
NullPointerException
- ifcontext
isnull
-
createUniqueId
Generate an identifier for a component. The identifier will be prefixed with UNIQUE_ID_PREFIX, and will be unique within this component-container. Optionally, a unique seed value can be supplied by component creators which should be included in the generated unique id.
If the
prependId
property has the valuefalse
, this method must callcreateUniqueId
on the next ancestorUniqueIdVendor
.- Specified by:
createUniqueId
in interfaceUniqueIdVendor
- Parameters:
context
- FacesContextseed
- an optional seed value - e.g. based on the position of the component in the VDL-template- Returns:
- a unique-id in this component-container
-
getContainerClientId
Override the
UIComponent.getContainerClientId(jakarta.faces.context.FacesContext)
to allow users to disable this form from prepending itsclientId
to its descendent'sclientIds
depending on the value of this form'sisPrependId()
property.- Overrides:
getContainerClientId
in classUIComponent
- Parameters:
context
- the Faces context.- Returns:
- the container client id.
-
visitTree
Description copied from class:UIComponent
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.
- Overrides:
visitTree
in classUIComponent
- Parameters:
context
- 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. - See Also:
-
invokeOnComponent
public boolean invokeOnComponent(FacesContext context, String clientId, ContextCallback callback) throws FacesException Description copied from class:UIComponentBase
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 toUIComponent.findComponent(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 callUIComponent.pushComponentToEL(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 callUIComponent.popComponentFromEL(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
UIComponent.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
UIComponent.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; } }); }
- Overrides:
invokeOnComponent
in classUIComponentBase
- 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:
FacesException
- if the argument Callback throws an Exception, it is wrapped in aFacesException
and re-thrown.- See Also:
-