-
- All Implemented Interfaces:
EditableValueHolder
,PartialStateHolder
,StateHolder
,TransientStateHolder
,ValueHolder
,ComponentSystemEventListener
,FacesListener
,SystemEventListenerHolder
,EventListener
public class HashParam extends OnloadParam
The
<o:hashParam>
is a component that extends the standard<f:viewParam>
with support for setting hash query parameter values in bean and automatically reflecting updated model values in hash query string.The "hash query string" is the part in URL after the
#
which could be formatted in the same format as a regular request query string (the part in URL after the?
). An example:https://example.com/page.xhtml#foo=baz&bar=kaz
This specific part of the URL (also called hash fragment identifier) is by default not sent to the server. This component will on page load and on every
window.onhashchange
event send it anyway so that the Faces model gets updated, and on every Faces ajax request update the hash query string in client side when the Faces model value has changed.Usage
It's very similar to the
<o:viewParam>
.<f:metadata> <o:hashParam name="foo" value="#{bean.foo}" /> <o:hashParam name="bar" value="#{bean.bar}" /> </f:metadata>
You can use the
render
attribute to declare which components should be updated when a hash parameter value is present.<f:metadata> <o:hashParam name="foo" value="#{bean.foo}" render="fooResult" /> <o:hashParam name="bar" value="#{bean.bar}" /> </f:metadata> ... <h:body> ... <h:panelGroup id="fooResult"> ... </h:panelGroup> ... </h:body>
In case you need to invoke a bean method before rendering, e.g. to preload the rendered contents based on new hash param values, then you can observe the
HashChangeEvent
. See the "Events" section for an usage example.You can use the
default
attribute to declare a non-null value which should be interpreted as the default value. In other words, when the current model value matches the default value, then the hash parameter will be removed.<f:metadata> <o:hashParam name="foo" value="#{bean.foo}" /> <o:hashParam name="bar" value="#{bean.bar}" default="kaz" /> </f:metadata>
When
#{bean.foo}
is"baz"
and#{bean.bar}
is"kaz"
or empty, then the reflected hash query string will becomehttps://example.com/page.xhtml#foo=baz
. If#{bean.bar}
is any other value, then it will appear in the hash query string.Note that as it extends from the standard
<f:viewParam>
, its built-in conversion and validation functionality is also supported on this component.Events
When the hash query string is changed by the client side, e.g. by following a
#foo=baz&bar=kaz
link, or by manually manipulating the URL, then a CDIHashChangeEvent
will be fired which can be observed in any CDI managed bean as below:public void onHashChange(@Observes HashChangeEvent event) { String oldHashString = event.getOldValue(); String newHashString = event.getNewValue(); // ... }
This is useful in case you want to preload the model for whatever is rendered by
<o:hashParam render>
.- Since:
- 3.2
- Author:
- Bauke Scholtz
- See Also:
OnloadParam
,HashChangeEvent
,Faces.getHashParameters()
,Faces.getHashParameterMap()
,Faces.getHashQueryString()
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class jakarta.faces.component.UIViewParameter
UIViewParameter.Reference
-
-
Field Summary
Fields Modifier and Type Field Description static String
COMPONENT_TYPE
The component type, which is "org.omnifaces.component.input.HashParam".static String
EVENT_VALUE
The omnifaces event value, which is "setHashParamValues".-
Fields inherited from class org.omnifaces.component.input.OnloadParam
state
-
Fields inherited from class jakarta.faces.component.UIViewParameter
COMPONENT_FAMILY
-
Fields inherited from class jakarta.faces.component.UIInput
ALWAYS_PERFORM_VALIDATION_WHEN_REQUIRED_IS_TRUE, CONVERSION_MESSAGE_ID, EMPTY_STRING_AS_NULL_PARAM_NAME, REQUIRED_MESSAGE_ID, UPDATE_MESSAGE_ID, VALIDATE_EMPTY_FIELDS_PARAM_NAME
-
Fields inherited from class jakarta.faces.component.UIComponent
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 Summary
Constructors Constructor Description HashParam()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
decodeAll(FacesContext context)
Decode all relevantOnloadParam
components at once.String
getDefault()
Returns the default value in case the actual hash parameter isnull
or empty.protected String
getEventValue(FacesContext context)
Returns the value of theOmniFaces.OMNIFACES_EVENT_PARAM_NAME
associated with the current component.protected String
getInitScript(FacesContext context)
Returns script which should be executed upon initialization of a new view.String
getRenderedValue(FacesContext context)
Convert the value to string using any converter and ensure that an empty string is returned when the component is invalid or the resulting string is null or represents the default value.protected String
getUpdateScript(FacesContext context)
Returns script which should be exeucted upon ajax update of the current view.static boolean
isHashParamRequest(FacesContext context)
Returnstrue
if the current request is triggered by a hash param request.void
setDefault(String defaultValue)
Sets the default value in case the actual hash parameter isnull
or empty.-
Methods inherited from class org.omnifaces.component.input.OnloadParam
decodeImmediately, getRender, isOnloadParamRequest, isOnloadParamRequest, processDecodes, processUpdates, processValidators, setRender
-
Methods inherited from class jakarta.faces.component.UIViewParameter
decode, encodeAll, getConvertedValue, getFamily, getName, getStringValue, getStringValueFromModel, getSubmittedValue, isImmediate, setName, setSubmittedValue, updateModel
-
Methods inherited from class jakarta.faces.component.UIInput
addValidator, addValueChangeListener, clearInitialState, compareValues, getConverterMessage, getRequiredMessage, getValidator, getValidatorMessage, getValidators, getValue, getValueChangeListener, getValueChangeListeners, isEmpty, isLocalValueSet, isRequired, isValid, markInitialState, removeValidator, removeValueChangeListener, resetValue, restoreState, saveState, setConverterMessage, setImmediate, setLocalValueSet, setRequired, setRequiredMessage, setValid, setValidator, setValidatorMessage, setValue, setValueChangeListener, validate, validateValue
-
Methods inherited from class jakarta.faces.component.UIOutput
getConverter, getLocalValue, setConverter
-
Methods inherited from class jakarta.faces.component.UIComponentBase
addClientBehavior, addFacesListener, broadcast, 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, invokeOnComponent, isRendered, isTransient, processRestoreState, processSaveState, queueEvent, removeFacesListener, restoreAttachedState, saveAttachedState, setId, setParent, setRendered, setRendererType, setTransient, setValueBinding, subscribeToEvent, unsubscribeFromEvent
-
Methods inherited from class jakarta.faces.component.UIComponent
getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, setValueExpression, visitTree
-
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.ValueHolder
getConverter, getLocalValue, setConverter
-
-
-
-
Field Detail
-
COMPONENT_TYPE
public static final String COMPONENT_TYPE
The component type, which is "org.omnifaces.component.input.HashParam".- See Also:
- Constant Field Values
-
EVENT_VALUE
public static final String EVENT_VALUE
The omnifaces event value, which is "setHashParamValues".- See Also:
- Constant Field Values
-
-
Method Detail
-
getInitScript
protected String getInitScript(FacesContext context)
Description copied from class:OnloadParam
Returns script which should be executed upon initialization of a new view.- Overrides:
getInitScript
in classOnloadParam
- Parameters:
context
- The involved faces context.- Returns:
- Script which should be executed upon initialization of a new view.
-
getUpdateScript
protected String getUpdateScript(FacesContext context)
Description copied from class:OnloadParam
Returns script which should be exeucted upon ajax update of the current view.- Overrides:
getUpdateScript
in classOnloadParam
- Parameters:
context
- The involved faces context.- Returns:
- Script which should be exeucted upon ajax update of the current view.
-
getEventValue
protected String getEventValue(FacesContext context)
Description copied from class:OnloadParam
Returns the value of theOmniFaces.OMNIFACES_EVENT_PARAM_NAME
associated with the current component.- Specified by:
getEventValue
in classOnloadParam
- Parameters:
context
- The involved faces context.- Returns:
- The value of the
OmniFaces.OMNIFACES_EVENT_PARAM_NAME
associated with the current component.
-
decodeAll
protected void decodeAll(FacesContext context)
Description copied from class:OnloadParam
Decode all relevantOnloadParam
components at once.- Specified by:
decodeAll
in classOnloadParam
- Parameters:
context
- The involved faces context.
-
getRenderedValue
public String getRenderedValue(FacesContext context)
Convert the value to string using any converter and ensure that an empty string is returned when the component is invalid or the resulting string is null or represents the default value.- Parameters:
context
- The involved faces context.- Returns:
- The rendered value.
-
getDefault
public String getDefault()
Returns the default value in case the actual hash parameter isnull
or empty.- Returns:
- The default value in case the actual hash parameter is
null
or empty.
-
setDefault
public void setDefault(String defaultValue)
Sets the default value in case the actual hash parameter isnull
or empty.- Parameters:
defaultValue
- The default value in case the actual hash parameter isnull
or empty.
-
isHashParamRequest
public static boolean isHashParamRequest(FacesContext context)
Returnstrue
if the current request is triggered by a hash param request. I.e. if it is initiated byOmniFaces.HashParam.setHashParamValues()
script which runs on page load when thewindow.location.hash
is present, and on everywindow.onhashchange
event.- Parameters:
context
- The involved faces context.- Returns:
true
if the current request is triggered by a hash param request.
-
-