public class UIViewRoot extends UIComponentBase implements UniqueIdVendor
UIViewRoot
is the UIComponent that represents the root of the UIComponent tree.
This component renders markup as the response to Ajax requests. It
also serves as the root of the component tree, and as a place to hang
per-view PhaseListener
s.
For each of the following lifecycle phase methods:
RenderResponse, via encodeBegin(javax.faces.context.FacesContext)
and encodeEnd(javax.faces.context.FacesContext)
Take the following action regarding
PhaseListener
s.
Initialize a state flag to
false
.If
getBeforePhaseListener()
returns non-null
, invoke the listener, passing in the correct correspondingPhaseId
for this phase.Upon return from the listener, call
FacesContext.getResponseComplete()
andFacesContext.getRenderResponse()
. If either returntrue
set the internal state flag totrue
.If or one or more listeners have been added by a call to
addPhaseListener(javax.faces.event.PhaseListener)
, invoke thebeforePhase
method on each one whosePhaseListener.getPhaseId()
matches the current phaseId, passing in the samePhaseId
as in the previous step.Upon return from each listener, call
FacesContext.getResponseComplete()
andFacesContext.getRenderResponse()
. If either returntrue
set the internal state flag totrue
.Execute any processing for this phase if the internal state flag was not set.
If
getAfterPhaseListener()
returns non-null
, invoke the listener, passing in the correct correspondingPhaseId
for this phase.If or one or more listeners have been added by a call to
addPhaseListener(javax.faces.event.PhaseListener)
, invoke theafterPhase
method on each one whosePhaseListener.getPhaseId()
matches the current phaseId, passing in the samePhaseId
as in the previous step.
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.
|
static java.lang.String |
METADATA_FACET_NAME |
static java.lang.String |
UNIQUE_ID_PREFIX
The prefix that will be used for identifiers generated
by the
createUniqueId() method. |
static java.lang.String |
VIEW_PARAMETERS_KEY
The key in the value set of the
view metadata BeanDescriptor, the value of which is a
|
static java.lang.String |
VIEWROOT_PHASE_LISTENER_QUEUES_EXCEPTIONS_PARAM_NAME
If this param is set, and calling
toLowerCase().equals("true") on a
String representation of its value returns true, exceptions thrown
by |
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
Constructor and Description |
---|
UIViewRoot()
Create a new
UIViewRoot instance with default property
values. |
Modifier and Type | Method and Description |
---|---|
void |
addComponentResource(FacesContext context,
UIComponent componentResource)
Add argument |
void |
addComponentResource(FacesContext context,
UIComponent componentResource,
java.lang.String target)
Add argument |
void |
addPhaseListener(PhaseListener newPhaseListener)
|
void |
broadcastEvents(FacesContext context,
PhaseId phaseId)
Broadcast any events that have been queued. |
java.lang.String |
createUniqueId()
Generate an
identifier for a component.
|
java.lang.String |
createUniqueId(FacesContext context,
java.lang.String seed)
Generate an identifier for a component.
|
void |
encodeBegin(FacesContext context)
Override the default
UIComponentBase.encodeBegin(javax.faces.context.FacesContext) behavior. |
void |
encodeChildren(FacesContext context)
If |
void |
encodeEnd(FacesContext context)
If
|
MethodExpression |
getAfterPhaseListener()
Return the
MethodExpression that will be invoked after
this view is rendered. |
MethodExpression |
getBeforePhaseListener()
Return the
MethodExpression that will be invoked
before this view is rendered. |
java.util.List<UIComponent> |
getComponentResources(FacesContext context)
Return an unmodifiable ordered |
java.util.List<UIComponent> |
getComponentResources(FacesContext context,
java.lang.String target)
Return an unmodifiable
|
java.lang.String |
getFamily()
Return the identifier of the component family to which this component belongs. |
java.util.Locale |
getLocale()
Return the
Locale to be used in localizing the
response being created for this view. |
java.util.List<PhaseListener> |
getPhaseListeners()
Return an unmodifiable list of the
|
java.lang.String |
getRenderKitId()
Return the render kit identifier of the
RenderKit associated with this view. |
boolean |
getRendersChildren()
Call |
java.lang.String |
getViewId()
Return the view identifier for this view.
|
java.util.List<SystemEventListener> |
getViewListenersForEventClass(java.lang.Class<? extends SystemEvent> systemEvent)
Return the
|
java.util.Map<java.lang.String,java.lang.Object> |
getViewMap()
This implementation simply calls through to |
java.util.Map<java.lang.String,java.lang.Object> |
getViewMap(boolean create)
Returns a |
boolean |
isInView()
Override superclass method to always return
|
void |
processApplication(FacesContext context)
Broadcast any events that have been queued for the Invoke
Application phase of the request processing lifecycle
and to clear out any events for later phases if the event processing
for this phase caused
FacesContext.renderResponse() or
FacesContext.responseComplete() to be called. |
void |
processDecodes(FacesContext context)
|
void |
processEvent(ComponentSystemEvent event)
If the argument |
void |
processRestoreState(FacesContext context,
java.lang.Object state)
The default
implementation must call |
void |
processUpdates(FacesContext context)
|
void |
processValidators(FacesContext context)
|
void |
queueEvent(FacesEvent event)
Override the default
UIComponentBase.queueEvent(javax.faces.event.FacesEvent) behavior to
accumulate the queued events for later broadcasting. |
void |
removeComponentResource(FacesContext context,
UIComponent componentResource)
Remove argument |
void |
removeComponentResource(FacesContext context,
UIComponent componentResource,
java.lang.String target)
Remove argument |
void |
removePhaseListener(PhaseListener toRemove)
If the argument
toRemove is in the list of PhaseListener s for this instance, it must be removed. |
void |
resetValues(FacesContext context,
java.util.Collection<java.lang.String> clientIds)
Visit the clientIds and, if the component is
an instance of |
void |
restoreState(FacesContext context,
java.lang.Object state)
Perform any
processing required to restore the state from the entries in the
state Object.
|
void |
restoreViewScopeState(FacesContext context,
java.lang.Object state)
Restore ViewScope state. |
java.lang.Object |
saveState(FacesContext context)
Gets the state of the instance as a
Serializable Object. |
void |
setAfterPhaseListener(MethodExpression newAfterPhase)
Allow an arbitrary
method to be called for the "afterPhase" event as the UIViewRoot
runs through its lifecycle.
|
void |
setBeforePhaseListener(MethodExpression newBeforePhase)
Allow an arbitrary method to
be called for the "beforePhase" event as the UIViewRoot runs
through its lifecycle.
|
void |
setInView(boolean isInView)
Overridden to take no action. |
void |
setLocale(java.util.Locale locale)
Set the
Locale to be used in localizing the
response being created for this view. |
void |
setRenderKitId(java.lang.String renderKitId)
Set the render kit identifier of the
RenderKit
associated with this view. |
void |
setViewId(java.lang.String viewId)
Set the view identifier for this view.
|
void |
subscribeToViewEvent(java.lang.Class<? extends SystemEvent> systemEvent,
SystemEventListener listener)
Install the listener instance
referenced by argument |
void |
unsubscribeFromViewEvent(java.lang.Class<? extends SystemEvent> systemEvent,
SystemEventListener listener)
Remove the listener instance
referenced by argument |
addClientBehavior, addFacesListener, broadcast, clearInitialState, decode, findComponent, getAttributes, getChildCount, getChildren, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getFacesContext, getFacesListeners, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getListenersForEventClass, getParent, getPassThroughAttributes, getRenderer, getRendererType, getValueBinding, invokeOnComponent, isRendered, isTransient, markInitialState, processSaveState, removeFacesListener, restoreAttachedState, saveAttachedState, setId, setParent, setRendered, setRendererType, setTransient, setValueBinding, subscribeToEvent, unsubscribeFromEvent
encodeAll, getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isVisitable, popComponentFromEL, pushComponentToEL, restoreTransientState, saveTransientState, setValueExpression, visitTree
public static final java.lang.String METADATA_FACET_NAME
public static final java.lang.String VIEW_PARAMETERS_KEY
The key in the value set of the
view metadata BeanDescriptor, the value of which is a
List<
.UIViewParameter.Reference
>
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 static final java.lang.String VIEWROOT_PHASE_LISTENER_QUEUES_EXCEPTIONS_PARAM_NAME
If this param is set, and calling
toLowerCase().equals("true") on a
String representation of its value returns true, exceptions thrown
by PhaseListener
s installed on the UIViewRoot
are
queued to the ExceptionHandler
instead of
being logged and swallowed.
public static final java.lang.String UNIQUE_ID_PREFIX
The prefix that will be used for identifiers generated
by the createUniqueId()
method.
public UIViewRoot()
Create a new UIViewRoot
instance with default property
values.
public boolean isInView()
Override superclass method to always return
true
because a UIViewRoot
is
defined to always be in a view.
isInView
in class UIComponent
true
if within a view hierarchy, false
otherwise.public void setInView(boolean isInView)
Overridden to take no action.
setInView
in class UIComponent
isInView
- ignore the value.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
UIComponent.getFamily()
public java.lang.String getRenderKitId()
Return the render kit identifier of the RenderKit
associated with this view. Unless
explicitly set, as in ViewHandler.createView(javax.faces.context.FacesContext, java.lang.String)
, the returned
value will be null.
null
.public void setRenderKitId(java.lang.String renderKitId)
Set the render kit identifier of the RenderKit
associated with this view. This method may be called at any time
between the end of Apply Request Values phase of the
request processing lifecycle (i.e. when events are being broadcast)
and the beginning of the Render Response phase.
public java.lang.String getViewId()
Return the view identifier for this view.
public void setViewId(java.lang.String viewId)
Set the view identifier for this view.
viewId
- The new view identifierpublic MethodExpression getBeforePhaseListener()
Return the MethodExpression
that will be invoked
before this view is rendered.
MethodExpression
that will be invoked before
this view is rendered.public void setBeforePhaseListener(MethodExpression newBeforePhase)
Allow an arbitrary method to
be called for the "beforePhase" event as the UIViewRoot runs
through its lifecycle. This method will be called for all phases
except PhaseId.RESTORE_VIEW
. Unlike a true PhaseListener
, this
approach doesn't allow for only receiving PhaseEvent
s for
a given phase.
The method must conform to the signature of PhaseListener.beforePhase(javax.faces.event.PhaseEvent)
.
newBeforePhase
- the MethodExpression
that will be
invoked before this view is rendered.public MethodExpression getAfterPhaseListener()
Return the MethodExpression
that will be invoked after
this view is rendered.
MethodExpression
that will be invoked after
this view is rendered.public void setAfterPhaseListener(MethodExpression newAfterPhase)
Allow an arbitrary
method to be called for the "afterPhase" event as the UIViewRoot
runs through its lifecycle. This method will be called for all
phases including PhaseId.RESTORE_VIEW
. Unlike a true PhaseListener
, this approach doesn't allow for only receiving
PhaseEvent
s for a given phase.
The method
must conform to the signature of PhaseListener.afterPhase(javax.faces.event.PhaseEvent)
.
newAfterPhase
- the MethodExpression
that will be
invoked after this view is rendered.public void removePhaseListener(PhaseListener toRemove)
If the argument toRemove
is in the list of PhaseListener
s for this instance, it must be removed.
toRemove
- the PhaseListener
to remove.public void addPhaseListener(PhaseListener newPhaseListener)
Add the argument newPhaseListener
to the list of
PhaseListener
s on this UIViewRoot
.
newPhaseListener
- the PhaseListener
to addpublic java.util.List<PhaseListener> getPhaseListeners()
Return an unmodifiable list of the
PhaseListener
instances attached to this
UIViewRoot
instance.
public void addComponentResource(FacesContext context, UIComponent componentResource)
Add argument component
,
which is assumed to represent a resource instance, as a resource
to this view. A resource instance is rendered by a resource
Renderer
, as described in the Standard HTML
RenderKit. The default implementation must call through to
addComponentResource(javax.faces.context.FacesContext,
javax.faces.component.UIComponent, java.lang.String)
.
context
- FacesContext
for the current requestcomponentResource
- The UIComponent
representing a
Resource
instance
public void addComponentResource(FacesContext context, UIComponent componentResource, java.lang.String target)
Add argument component
,
which is assumed to represent a resource instance, as a resource
to this view. A resource instance is rendered by a resource
Renderer
, as described in the Standard HTML
RenderKit.
The component
must be added using the following
algorithm:
If the target
argument is null
,
look for a target
attribute on the
component
. If there is no target
attribute, set target
to be the default value
head
Call getComponentResources(javax.faces.context.FacesContext, java.lang.String)
to obtain the child
list for the given target.
If the component ID of componentResource
matches the
the ID of a resource that has allready been added, remove the old
resource.
Add the component
resource to the
list.
The resource Renderer
must ensure of the following:
ResourceHandler.isResourceRendered(FacesContext, String, String)
returns true
.ResourceHandler.markResourceRendered(FacesContext, String, String)
.context
- FacesContext
for the current requestcomponentResource
- The UIComponent
representing a
Resource
instancetarget
- The name of the facet for which the UIComponent
will be addedpublic java.util.List<UIComponent> getComponentResources(FacesContext context, java.lang.String target)
Return an unmodifiable
List
of UIComponent
s for the provided
target
agrument. Each component
in the
List
is assumed to represent a resource
instance.
The default implementation must use an algorithm equivalent to the the following.
component
by calling getFacet()
using
target
as the argument.context.getApplication().createComponent().
The argument to this method
must refer to a component that extends UIPanel
and
overrides the encodeAll()
method to take no action.
This is necessary to prevent component resources from being
inadvertently rendered.
id
of the
facet to be a string created by prepending the literal string
“javax_faces_location_
” (without the
quotes) to the value of the target
argumentMap
using target
as the keycontext
- the Faces context.target
- The name of the facet for which the components will be returned.List
of UIComponent
children of
the facet with the name target
. If no children are
found for the facet, return Collections.emptyList()
.java.lang.NullPointerException
- if target
or
context
is null
public java.util.List<UIComponent> getComponentResources(FacesContext context)
Return an unmodifiable ordered List
of all UIComponent
resources of all supported targets.
Each component
in the List
is assumed to represent a resource instance. The ordering
is the same as the resources would appear in the component tree.
context
- The Faces context.List
of all UIComponent
resources of all supported targets. If no resources are
found, return an empty List
.java.lang.NullPointerException
- If context
is null
.public void removeComponentResource(FacesContext context, UIComponent componentResource)
Remove argument component
,
which is assumed to represent a resource instance, as a resource
to this view.
context
- FacesContext
for the current requestcomponentResource
- The UIComponent
representing a
Resource
instance
public void removeComponentResource(FacesContext context, UIComponent componentResource, java.lang.String target)
Remove argument component
,
which is assumed to represent a resource instance, as a resource
to this view. A resource instance is rendered by a resource
Renderer
, as described in the Standard HTML
RenderKit.
The component
must be removed using the following algorithm:
target
argument is null
, look for a target
attribute on the component
.target
attribute, set target
to be the default value head
getComponentResources(javax.faces.context.FacesContext, java.lang.String)
to obtain the child list for the
given target.component
resource from the child list.context
- FacesContext
for the current requestcomponentResource
- The UIComponent
representing a
Resource
instancetarget
- The name of the facet for which the UIComponent
will be addedpublic void queueEvent(FacesEvent event)
Override the default UIComponentBase.queueEvent(javax.faces.event.FacesEvent)
behavior to
accumulate the queued events for later broadcasting.
queueEvent
in class UIComponentBase
event
- FacesEvent
to be queuedjava.lang.IllegalStateException
- if this component is not a
descendant of a UIViewRoot
java.lang.NullPointerException
- if event
is null
public void broadcastEvents(FacesContext context, PhaseId phaseId)
Broadcast any events that have been
queued. First broadcast events that have been queued for PhaseId.ANY_PHASE
. Then broadcast ane events that have been
queued for the current phase. In both cases, UIComponent.pushComponentToEL(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
must be called before the event is
broadcast, and UIComponent.popComponentFromEL(javax.faces.context.FacesContext)
must be
called after the return from the broadcast, even in the case of
an exception.
context
- FacesContext
for the current requestphaseId
- PhaseId
of the current phasepublic void processRestoreState(FacesContext context, java.lang.Object state)
The default
implementation must call UIComponentBase.processRestoreState(javax.faces.context.FacesContext, java.lang.Object)
from within a
try
block. The try
block must have a
finally
block that ensures that no FacesEvent
s remain in the event queue.
processRestoreState
in class UIComponentBase
context
- the FacesContext
for this requetsstate
- the opaque state object obtained from the StateManager
public void processEvent(ComponentSystemEvent event) throws AbortProcessingException
If the argument event
is an instance of PostRestoreStateEvent
and
PartialViewContext.isPartialRequest()
returns true
, then loop over all component resources
and call ResourceHandler.markResourceRendered(FacesContext, String, String)
for each of them.
Finally, delegate to super.
processEvent
in interface ComponentSystemEventListener
processEvent
in class UIComponent
event
- the ComponentSystemEvent
instance that
is being processed.AbortProcessingException
- if lifecycle processing should
cease for this request.public void processDecodes(FacesContext context)
Perform partial processing by calling
PartialViewContext.processPartial(javax.faces.event.PhaseId)
with
PhaseId.APPLY_REQUEST_VALUES
if:
PartialViewContext.isPartialRequest()
returns true
and we don't have a request to process all
components in the view
(PartialViewContext.isExecuteAll()
returns
false
)UIComponentBase.processDecodes(javax.faces.context.FacesContext)
if one of the following
conditions are met:
PartialViewContext.isPartialRequest()
returns true
and we have a request to process all
components in the view
(PartialViewContext.isExecuteAll()
returns
true
)PartialViewContext.isPartialRequest()
returns false
Override the default
UIComponentBase.processDecodes(javax.faces.context.FacesContext)
behavior to broadcast any queued
events after the default processing or partial processing has been
completed and to clear out any events for later phases if the event
processing for this phase caused FacesContext.renderResponse()
or FacesContext.responseComplete()
to be called.
processDecodes
in class UIComponentBase
context
- FacesContext
for the request we are processingjava.lang.NullPointerException
- if context
is null
public void resetValues(FacesContext context, java.util.Collection<java.lang.String> clientIds)
Visit the clientIds and, if the component is
an instance of EditableValueHolder
,
call its EditableValueHolder.resetValue()
method.
Use UIComponent.visitTree(javax.faces.component.visit.VisitContext, javax.faces.component.visit.VisitCallback)
to do the visiting.
context
- the FacesContext
for the request we are processing.clientIds
- The client ids to be visited, on which the described action will be taken.public void encodeBegin(FacesContext context) throws java.io.IOException
Override the default UIComponentBase.encodeBegin(javax.faces.context.FacesContext)
behavior. If
getBeforePhaseListener()
returns non-null
,
invoke it, passing a PhaseEvent
for the PhaseId.RENDER_RESPONSE
phase. If the internal list populated
by calls to addPhaseListener(javax.faces.event.PhaseListener)
is non-empty, any listeners
in that list must have their PhaseListener.beforePhase(javax.faces.event.PhaseEvent)
method called, passing the PhaseEvent
. Any Exception
s
that occur during invocation of any of the beforePhase
listeners must be logged and swallowed,
unless the VIEWROOT_PHASE_LISTENER_QUEUES_EXCEPTIONS_PARAM_NAME
parameter is set. In that case, the Exception
must be passed to the
ExceptionHandler
as well.
encodeBegin
in class UIComponentBase
context
- FacesContext
for the response we are creatingjava.io.IOException
- if an input/output error occurs while renderingpublic void encodeChildren(FacesContext context) throws java.io.IOException
If PartialViewContext.isAjaxRequest()
returns
true
, perform partial rendering by calling
PartialViewContext.processPartial(javax.faces.event.PhaseId)
with
PhaseId.RENDER_RESPONSE
. If PartialViewContext.isAjaxRequest()
returns
false
, delegate to the parent UIComponentBase.encodeChildren(javax.faces.context.FacesContext)
method.
If this UIViewRoot
is an instance of NamingContainer
, then the Jakarta Server Faces
implementation must ensure that all encoded POST request parameter names are prefixed with
UIComponent.getContainerClientId(FacesContext)
as per rules of UIComponent.getClientId(FacesContext)
.
This also covers all predefined POST request parameters which are listed below:
ResponseStateManager.VIEW_STATE_PARAM
ResponseStateManager.CLIENT_WINDOW_PARAM
ResponseStateManager.RENDER_KIT_ID_PARAM
ClientBehaviorContext.BEHAVIOR_SOURCE_PARAM_NAME
ClientBehaviorContext.BEHAVIOR_EVENT_PARAM_NAME
PartialViewContext.PARTIAL_EVENT_PARAM_NAME
PartialViewContext.PARTIAL_EXECUTE_PARAM_NAME
PartialViewContext.PARTIAL_RENDER_PARAM_NAME
PartialViewContext.RESET_VALUES_PARAM_NAME
encodeChildren
in class UIComponentBase
context
- FacesContext
for the response we are creatingjava.io.IOException
- if an input/output error occurs while renderingpublic void encodeEnd(FacesContext context) throws java.io.IOException
If
getAfterPhaseListener()
returns non-null
, invoke it, passing a PhaseEvent
for the PhaseId.RENDER_RESPONSE
phase. Any
Exception
s that occur during invocation of the afterPhase listener
must be logged and swallowed,
unless the VIEWROOT_PHASE_LISTENER_QUEUES_EXCEPTIONS_PARAM_NAME
parameter is set. In that case, the Exception
must be passed to the
ExceptionHandler
as well.. If the
current view has view parameters, as indicated by a non-empty and
non-UnsupportedOperationException
throwing return
from ViewDeclarationLanguage.getViewMetadata(javax.faces.context.FacesContext, String)
,
call UIViewParameter.encodeAll(javax.faces.context.FacesContext)
on each parameter. If
calling getViewParameters()
causes
UnsupportedOperationException
to be thrown, the
exception must be silently swallowed.
encodeEnd
in class UIComponentBase
context
- FacesContext
for the response we are creatingjava.io.IOException
- if an input/output error occurs while renderingpublic boolean getRendersChildren()
Call UIComponentBase.getRendersChildren()
If PartialViewContext.isAjaxRequest()
returns true
this method must return true
.
getRendersChildren
in class UIComponentBase
true
if the component renders its children, false
otherwise.public void processValidators(FacesContext context)
Perform partial processing by calling
PartialViewContext.processPartial(javax.faces.event.PhaseId)
with
PhaseId.PROCESS_VALIDATIONS
if:
PartialViewContext.isPartialRequest()
returns true
and we don't have a request to process all
components in the view
(PartialViewContext.isExecuteAll()
returns
false
)UIComponentBase.processValidators(javax.faces.context.FacesContext)
if one of the following
conditions are met:
PartialViewContext.isPartialRequest()
returns true
and we have a request to process all
components in the view
(PartialViewContext.isExecuteAll()
returns
true
)PartialViewContext.isPartialRequest()
returns false
Override the default
UIComponentBase.processValidators(javax.faces.context.FacesContext)
behavior to broadcast any
queued events after the default processing or partial processing has been
completed and to clear out any events for later phases if the event
processing for this phase caused FacesContext.renderResponse()
or
FacesContext.responseComplete()
to be called.
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)
Perform partial processing by calling
PartialViewContext.processPartial(javax.faces.event.PhaseId)
with
PhaseId.UPDATE_MODEL_VALUES
if:
PartialViewContext.isPartialRequest()
returns true
and we don't have a request to process all
components in the view
(PartialViewContext.isExecuteAll()
returns
false
)UIComponentBase.processUpdates(javax.faces.context.FacesContext)
if one of the following
conditions are met:
PartialViewContext.isPartialRequest()
returns true
and we have a request to process all
components in the view
(PartialViewContext.isExecuteAll()
returns
true
)PartialViewContext.isPartialRequest()
returns false
Override the default UIComponentBase
behavior to broadcast any queued events after the default processing or
partial processing has been completed and to clear out any events for
later phases if the event processing for this phase caused
FacesContext.renderResponse()
or
FacesContext.responseComplete()
to be called.
processUpdates
in class UIComponentBase
context
- FacesContext
for the request we are processingjava.lang.NullPointerException
- if context
is null
public void processApplication(FacesContext context)
Broadcast any events that have been queued for the Invoke
Application phase of the request processing lifecycle
and to clear out any events for later phases if the event processing
for this phase caused FacesContext.renderResponse()
or
FacesContext.responseComplete()
to be called.
context
- FacesContext
for the request we are processingjava.lang.NullPointerException
- if context
is null
public java.lang.String createUniqueId()
Generate an
identifier for a component. The identifier will be prefixed with
UNIQUE_ID_PREFIX, and will be unique within the non-NamingContainer
child
sub-trees of this UIViewRoot.
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 UIViewRoot. Optionally, a unique seed value can be supplied by component creators which should be included in the generated unique id.
createUniqueId
in interface UniqueIdVendor
context
- FacesContextseed
- an optional seed value - e.g. based on the position of the component in the VDL-templatepublic java.util.Locale getLocale()
Return the Locale
to be used in localizing the
response being created for this view.
Algorithm:
If we have a locale
ivar, return it. If we have
a value expression for "locale", get its value. If the value is
null
, return the result of calling ViewHandler.calculateLocale(javax.faces.context.FacesContext)
. If the
value is an instance of java.util.Locale
return it.
If the value is a String, convert it to a
java.util.Locale
and return it. If there is no
value expression for "locale", return the result of calling ViewHandler.calculateLocale(javax.faces.context.FacesContext)
.
Locale
obtained by executing the
above algorithm.public void setLocale(java.util.Locale locale)
Set the Locale
to be used in localizing the
response being created for this view.
locale
- The new localization Localepublic java.util.Map<java.lang.String,java.lang.Object> getViewMap()
This implementation simply calls through to getViewMap(boolean)
, passing true
as the argument, and
returns the result.
null
.public java.util.Map<java.lang.String,java.lang.Object> getViewMap(boolean create)
Returns a Map
that acts
as the interface to the data store that is the "view scope", or,
if this instance does not have such a Map
and the
create
argument is true
, creates one
and returns it. This map must be instantiated lazily and cached
for return from subsequent calls to this method on this
UIViewRoot
instance. Application.publishEvent(javax.faces.context.FacesContext, java.lang.Class<? extends javax.faces.event.SystemEvent>, java.lang.Object)
must be called,
passing the current
FacesContext
as the first argument, PostConstructViewMapEvent
.class
as the second
argument, UIViewRoot.class
as the
third argument and this UIViewRoot
instance
as the fourth argument. It is
necessary to pass the UIViewRoot.class
argument to
account for cases when the UIViewRoot
has been
extended with a custom class.
The returned Map
must be implemented such that calling
clear()
on the Map
causes Application.publishEvent(javax.faces.context.FacesContext, java.lang.Class<? extends javax.faces.event.SystemEvent>, java.lang.Object)
to be
called, passing PreDestroyViewMapEvent
.class
as the first argument and this UIViewRoot
instance
as the second argument.
Depending upon application
configuration, objects stored in the view map may need to be
Serializable
. In general, it is a good idea to
ensure that any objects stored in the view map are
Serializable
.
For reasons made clear in ViewScoped
,
this map must ultimately be stored in the session. For this reason, a
true
value for the create
argument will force the
session to be created with a call to
ExternalContext.getSession(boolean)
.
See FacesContext.setViewRoot(javax.faces.component.UIViewRoot)
for the specification of when the
clear()
method must be called.
create
- true
to create a new Map
for this
instance if necessary; false
to return
null
if there's no current Map
.null
.public void subscribeToViewEvent(java.lang.Class<? extends SystemEvent> systemEvent, SystemEventListener listener)
Install the listener instance
referenced by argument listener
into the
UIViewRoot
as a listener for events of type
systemEventClass
.
Note that installed listeners are not maintained as part of the
UIViewRoot
's state.
systemEvent
- the Class
of event for which
listener
must be fired.listener
- the implementation of SystemEventListener
whose SystemEventListener.processEvent(javax.faces.event.SystemEvent)
method must
be called when events of type systemEventClass
are
fired.java.lang.NullPointerException
- if systemEventClass
or listener
are null
.public void unsubscribeFromViewEvent(java.lang.Class<? extends SystemEvent> systemEvent, SystemEventListener listener)
Remove the listener instance
referenced by argument listener
from the
UIViewRoot
as a listener for events of type
systemEventClass
.
systemEvent
- the Class
of event for which
listener
must be fired.listener
- the implementation of SystemEventListener
whose SystemEventListener.processEvent(javax.faces.event.SystemEvent)
method must
be called when events of type systemEventClass
are
fired.java.lang.NullPointerException
- if
systemEventClass
or listener
are
null
.public java.util.List<SystemEventListener> getViewListenersForEventClass(java.lang.Class<? extends SystemEvent> systemEvent)
Return the
SystemEventListener
instances registered on this
UIComponent
instance that are interested in events
of type eventClass
.
systemEvent
- the Class
of event for which the
listeners must be returned.java.lang.NullPointerException
- if argument systemEvent
is null
.public void restoreViewScopeState(FacesContext context, java.lang.Object state)
Restore ViewScope state. This is
needed to allow the use of view scoped beans for EL-expressions
in the template from which the component tree is built. For
example: <ui:include
src="#{viewScopedBean.includeFileName}"/>
.
context
- current FacesContext.state
- the state object.public java.lang.Object saveState(FacesContext context)
StateHolder
Gets the state of the instance as a
Serializable
Object.
If the class that implements this interface has references to
instances that implement StateHolder (such as a
UIComponent
with event handlers, validators, etc.)
this method must call the StateHolder.saveState(javax.faces.context.FacesContext)
method on all those
instances as well. This method must not save the state
of children and facets. That is done via the StateManager
This method must not alter the state of the implementing object. In other words, after executing this code:
Object state = component.saveState(facesContext);
component
should be the same as before executing
it.
The return from this method must be Serializable
saveState
in interface StateHolder
saveState
in class UIComponentBase
context
- the Faces context.public void restoreState(FacesContext context, java.lang.Object state)
StateHolder
Perform any processing required to restore the state from the entries in the state Object.
If the class that implements this interface has references to
instances that also implement StateHolder (such as a
UIComponent
with event handlers, validators, etc.)
this method must call the StateHolder.restoreState(javax.faces.context.FacesContext, java.lang.Object)
method on all those
instances as well.
If the state
argument is null
, take no action and return.
restoreState
in interface StateHolder
restoreState
in class UIComponentBase
context
- the Faces context.state
- the state.