public class UIForm extends UIComponentBase implements NamingContainer, UniqueIdVendor
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.
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
COMPONENT_FAMILY
The standard component family for this component.
|
static java.lang.String |
COMPONENT_TYPE
The standard component type for this component.
|
ATTRS_WITH_DECLARED_DEFAULT_VALUES, BEANINFO_KEY, bindings, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, CURRENT_COMPONENT, CURRENT_COMPOSITE_COMPONENT, FACETS_KEY, HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME, VIEW_LOCATION_KEY
SEPARATOR_CHAR
Constructor and Description |
---|
UIForm()
Create a new
UIForm instance with default property values. |
Modifier and Type | Method and Description |
---|---|
java.lang.String |
createUniqueId(FacesContext context,
java.lang.String seed)
Generate an identifier for a component. |
java.lang.String |
getContainerClientId(FacesContext context)
Override the
UIComponent.getContainerClientId(jakarta.faces.context.FacesContext) to allow users to disable this form from prepending its
clientId to its descendent's clientIds depending on the value of this form's
isPrependId() property. |
java.lang.String |
getFamily()
Return the identifier of the component family to which this component belongs. |
boolean |
invokeOnComponent(FacesContext context,
java.lang.String clientId,
ContextCallback callback)
Starting at this component in the View hierarchy, search for a component
with a
clientId equal to the argument clientId and, if found, call the
ContextCallback.invokeContextCallback(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent) method on the argument callback , passing the current
FacesContext and the found component as arguments. |
boolean |
isPrependId()
Is the id prepended.
|
boolean |
isSubmitted()
Returns the current value of the
submitted property. |
void |
processDecodes(FacesContext context)
Override
UIComponent.processDecodes(jakarta.faces.context.FacesContext) to ensure that the form is decoded before its children. |
void |
processUpdates(FacesContext context)
Override
UIComponent.processUpdates(jakarta.faces.context.FacesContext) to ensure that the children of this UIForm instance are only
processed if isSubmitted() returns true . |
void |
processValidators(FacesContext context)
Override |
void |
setPrependId(boolean prependId) |
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,
with true as the argument, during the UIComponent.decode(jakarta.faces.context.FacesContext) for this UIForm instance. |
boolean |
visitTree(VisitContext context,
VisitCallback callback)
Perform a tree visit starting at this node in the tree. |
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, getValueBinding, isRendered, isTransient, markInitialState, processRestoreState, processSaveState, queueEvent, removeFacesListener, restoreAttachedState, restoreState, saveAttachedState, saveState, setId, setParent, setRendered, setRendererType, setTransient, setValueBinding, subscribeToEvent, unsubscribeFromEvent
encodeAll, getClientId, getCompositeComponentParent, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, setValueExpression
public static final java.lang.String COMPONENT_TYPE
The standard component type for this component.
public static final java.lang.String COMPONENT_FAMILY
The standard component family for this component.
public UIForm()
Create a new UIForm
instance with default property values.
public java.lang.String getFamily()
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 appropriate Renderer
for this
component instance. Note this method should NOT return null
getFamily
in class UIComponent
public boolean isSubmitted()
Returns the current value of the submitted
property. The
default value is false
. See setSubmitted(boolean)
for details.
This property must be kept as a transient property using the UIComponent.getTransientStateHelper()
.
true
if the form was submitted, false
otherwise.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,
with true
as the argument, during the UIComponent.decode(jakarta.faces.context.FacesContext)
for this UIForm
instance.
If this UIForm
instance is not experiencing a submit, this method must
be called, with false
as the argument, during the UIComponent.decode(jakarta.faces.context.FacesContext)
for this
UIForm
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()
.
submitted
- the new value of the submitted flag.public boolean isPrependId()
true
if it is, false
otherwise.public void setPrependId(boolean prependId)
public void processDecodes(FacesContext context)
Override UIComponent.processDecodes(jakarta.faces.context.FacesContext)
to ensure that the form is decoded before its children.
This is necessary to allow the submitted
property to be correctly set.
processDecodes
in class UIComponentBase
context
- FacesContext
for the request we are processingjava.lang.NullPointerException
- if context
is null
public void processValidators(FacesContext context)
Override UIComponent.processValidators(jakarta.faces.context.FacesContext)
to ensure that the children of this UIForm
instance are
only processed if isSubmitted()
returns true
.
processValidators
in class UIComponentBase
context
- FacesContext
for the request we are processingjava.lang.NullPointerException
- if context
is null
PreValidateEvent
,
PostValidateEvent
public void processUpdates(FacesContext context)
Override UIComponent.processUpdates(jakarta.faces.context.FacesContext)
to ensure that the children of this UIForm
instance are only
processed if isSubmitted()
returns true
.
processUpdates
in class UIComponentBase
context
- FacesContext
for the request we are processingjava.lang.NullPointerException
- if context
is null
public java.lang.String createUniqueId(FacesContext context, java.lang.String seed)
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 value false
, this method must call
createUniqueId
on the next ancestor UniqueIdVendor
.
createUniqueId
in interface UniqueIdVendor
context
- FacesContextseed
- an optional seed value - e.g. based on the position of the component in the VDL-templatepublic java.lang.String getContainerClientId(FacesContext context)
Override the UIComponent.getContainerClientId(jakarta.faces.context.FacesContext)
to allow users to disable this form from prepending its
clientId
to its descendent's clientIds
depending on the value of this form's
isPrependId()
property.
getContainerClientId
in class UIComponent
context
- the Faces context.public boolean visitTree(VisitContext context, VisitCallback callback)
UIComponent
Perform a tree visit starting at this node in the tree.
UIComponent.visitTree() implementations do not invoke the VisitCallback
directly, but instead call
VisitContext.invokeVisitCallback(jakarta.faces.component.UIComponent, jakarta.faces.component.visit.VisitCallback)
to invoke the callback. This allows VisitContext
implementations to
provide optimized tree traversals, for example by only calling the VisitCallback
for a subset of components.
UIComponent.visitTree() implementations must call UIComponent.pushComponentToEL() before performing the visit and UIComponent.popComponentFromEL() after the visit.
visitTree
in class UIComponent
context
- the VisitContext
for this visitcallback
- the VisitCallback
instance whose visit
method will be called for each node
visited.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.
UIComponent.visitTree(jakarta.faces.component.visit.VisitContext, jakarta.faces.component.visit.VisitCallback)
public boolean invokeOnComponent(FacesContext context, java.lang.String clientId, ContextCallback callback) throws FacesException
UIComponentBase
Starting at this component in the View hierarchy, search for a component
with a clientId
equal to the argument clientId
and, if found, call the
ContextCallback.invokeContextCallback(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
method on the argument callback
, passing the current
FacesContext
and the found component as arguments. This method is similar to UIComponent.findComponent(java.lang.String)
but it
does not support the leading UINamingContainer.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 argument
clientId
. If so, first call UIComponent.pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
, then call
the ContextCallback.invokeContextCallback(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
method on the argument callback, passing through the
FacesContext
argument and passing this as the component argument. Then
call UIComponent.popComponentFromEL(jakarta.faces.context.FacesContext)
. If an Exception
is thrown by the callback, wrap it in a
FacesException
and re-throw it. Otherwise, return true
.
Otherwise, for each component returned by UIComponent.getFacetsAndChildren()
, call invokeOnComponent()
passing the arguments to this method, in order. The first time invokeOnComponent()
returns true, abort
traversing the rest of the Iterator
and return true
.
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 argument clientId
. For example, an iterating component such as
UIData
will need to set its row index to correctly reflect the argument clientId
before finding
the appropriate child component backed by the correct row. When the callback returns, either normally or by throwing
an Exception
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()
returned true
from
invokeOnComponent()
, return false
.
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;
}
});
}
invokeOnComponent
in class UIComponentBase
context
- the FacesContext
for the current requestclientId
- the client identifier of the component to be passed to the argument callback.callback
- an implementation of the Callback interface.true
if the a component with the given clientId
is found, the callback method was
successfully invoked passing that component as an argument, and no Exception was thrown. Returns false
if no component with the given clientId
is found.FacesException
- if the argument Callback throws an Exception, it is wrapped in a FacesException
and re-thrown.UIComponent.invokeOnComponent(jakarta.faces.context.FacesContext, java.lang.String, jakarta.faces.component.ContextCallback)