- All Implemented Interfaces:
EditableValueHolder,PartialStateHolder,StateHolder,TransientStateHolder,ValueHolder,ComponentSystemEventListener,FacesListener,SystemEventListenerHolder,EventListener
- Direct Known Subclasses:
ComponentIdParam
The <o:viewParam> is a component that extends the standard <f:viewParam> and provides a stateless mode of operation and
fixes the issue wherein null model values are converted to empty string parameters in query string (e.g. when includeViewParams=true) and the
(bean) validation never being triggered when the parameter is completely absent in query string, causing e.g. @NotNull to fail.
Stateless mode to avoid unnecessary conversion, validation and model updating on postbacks
The standard UIViewParameter implementation calls the model setter again after postback. This is not always desired when being bound to a view scoped
bean and can lead to performance problems when combined with an expensive converter. To solve this, this component by default stores the submitted value as a
component property instead of in the model (and thus in the view state in case the binding is to a view scoped bean).
The standard UIViewParameter implementation calls the converter and validators again on postbacks. This is not always desired when you have e.g. a
required="true", but the parameter is not retained on form submit. You would need to retain it on every single command link/button by
<f:param>. To solve this, this component doesn't call the converter and validators again on postbacks.
Using name as default for label
The <o:viewParam> also provides a default for the label atrribute. When the label attribute is omitted, the
name attribute will be used as label.
Avoid unnecessary empty parameter in query string
The standard UIViewParameter implementation calls the converter regardless of whether the evaluated model value is null or not. As
converters by specification return an empty string in case of null value, this is being added to the query string as an empty parameter when
e.g. includeViewParams=true is used. This is not desired. The workaround was added in OmniFaces 1.8.
Support bean validation and triggering validate events on null value
The standard UIViewParameter implementation uses in JSF 2.0-2.2 an internal "is required" check when the submitted value is null, hereby
completely bypassing the standard UIInput validation, including any bean validation annotations and even the PreValidateEvent and
PostValidateEvent events. This is not desired. The workaround was added in OmniFaces 2.0. In JSF 2.3, this has been fixed and has only effect when
jakarta.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL context param is set to true.
Default value when no parameter is set
The <o:viewParam> also supports providing a default value via the default attribute. When the parameter is not available,
then the value specified in default attribute will be set in the model instead. The support was added in OmniFaces 2.2.
Usage
You can use it the same way as <f:viewParam>, you only need to change f: to o:.
<o:viewParam name="foo" value="#{bean.foo}" />
- Author:
- Arjan Tijms, Bauke Scholtz
-
Nested Class Summary
Nested classes/interfaces inherited from class jakarta.faces.component.UIViewParameter
UIViewParameter.Reference -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe component type, which is "org.omnifaces.component.input.ViewParam".Fields inherited from class jakarta.faces.component.UIViewParameter
COMPONENT_FAMILYFields 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_NAMEFields 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 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionReturns the default value in case the actual request parameter isnullor empty.getStringValueFromModel(FacesContext context) When there's a value expression and the evaluated model value isnull, then just returnnullinstead of delegating to default implementation which would return an empty string when a converter is attached.booleanvoidprocessDecodes(FacesContext context) voidprocessValidators(FacesContext context) voidsetDefault(String defaultValue) Sets the default value in case the actual request parameter isnullor empty.voidvoidsetSubmittedValue(Object submittedValue) Methods inherited from class jakarta.faces.component.UIViewParameter
decode, encodeAll, getConvertedValue, getFacesContext, getFamily, getName, getStringValue, isImmediate, isRendered, updateModelMethods inherited from class jakarta.faces.component.UIInput
addValidator, addValueChangeListener, broadcast, clearInitialState, compareValues, getConverterMessage, getRequiredMessage, getValidatorMessage, getValidators, getValue, getValueChangeListeners, isEmpty, isLocalValueSet, isValid, markInitialState, processUpdates, removeValidator, removeValueChangeListener, resetValue, restoreState, saveState, setConverterMessage, setImmediate, setLocalValueSet, setRequired, setRequiredMessage, setValid, setValidatorMessage, setValue, validate, validateValueMethods inherited from class jakarta.faces.component.UIOutput
getConverter, getLocalValue, setConverterMethods inherited from class jakarta.faces.component.UIComponentBase
addClientBehavior, addFacesListener, encodeBegin, encodeChildren, encodeEnd, findComponent, getChildCount, getChildren, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getFacesListeners, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getParent, getPassThroughAttributes, getRenderer, getRendererType, getRendersChildren, invokeOnComponent, isTransient, processRestoreState, processSaveState, queueEvent, removeFacesListener, restoreAttachedState, saveAttachedState, setId, setParent, setRendered, setRendererType, setTransient, visitTreeMethods inherited from class jakarta.faces.component.UIComponent
getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getListenersForEventClass, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, setValueExpression, subscribeToEvent, unsubscribeFromEventMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface jakarta.faces.component.ValueHolder
getConverter, getLocalValue, setConverter
-
Field Details
-
COMPONENT_TYPE
The component type, which is "org.omnifaces.component.input.ViewParam".- See Also:
-
-
Constructor Details
-
ViewParam
public ViewParam()
-
-
Method Details
-
processDecodes
- Overrides:
processDecodesin classUIInput
-
processValidators
- Overrides:
processValidatorsin classUIViewParameter
-
getAttributes
- Overrides:
getAttributesin classUIComponentBase
-
getStringValueFromModel
When there's a value expression and the evaluated model value isnull, then just returnnullinstead of delegating to default implementation which would return an empty string when a converter is attached.- Overrides:
getStringValueFromModelin classUIViewParameter- Since:
- 1.8
-
getSubmittedValue
- Specified by:
getSubmittedValuein interfaceEditableValueHolder- Overrides:
getSubmittedValuein classUIInput
-
setSubmittedValue
- Specified by:
setSubmittedValuein interfaceEditableValueHolder- Overrides:
setSubmittedValuein classUIInput
-
getDefault
Returns the default value in case the actual request parameter isnullor empty.- Returns:
- The default value in case the actual request parameter is
nullor empty. - Since:
- 2.2
-
setDefault
Sets the default value in case the actual request parameter isnullor empty.- Parameters:
defaultValue- The default value in case the actual request parameter isnullor empty.- Since:
- 2.2
-
setName
- Overrides:
setNamein classUIViewParameter
-
isRequired
public boolean isRequired()- Specified by:
isRequiredin interfaceEditableValueHolder- Overrides:
isRequiredin classUIInput
-