public class ViewParam extends UIViewParameter
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.
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.
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.
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.
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
javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
context param is set to true
.
The <o:viewParam>
also supports providing a default value via the new 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.
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}" />
UIViewParameter.Reference
Modifier and Type | Field and Description |
---|---|
static String |
COMPONENT_TYPE |
COMPONENT_FAMILY
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
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 |
---|
ViewParam() |
Modifier and Type | Method and Description |
---|---|
Map<String,Object> |
getAttributes() |
String |
getDefault()
Returns the default value in case the actual request parameter is
null or empty. |
String |
getStringValueFromModel(FacesContext context)
When there's a value expression and the evaluated model value is
null , then just return
null instead of delegating to default implementation which would return an empty string when a
converter is attached. |
String |
getSubmittedValue() |
boolean |
isRequired() |
void |
processDecodes(FacesContext context) |
void |
processValidators(FacesContext context) |
void |
setDefault(String defaultValue)
Sets the default value in case the actual request parameter is
null or empty. |
void |
setSubmittedValue(Object submittedValue) |
decode, encodeAll, getConvertedValue, getFamily, getName, getStringValue, isImmediate, setName, updateModel
addValidator, addValueChangeListener, clearInitialState, compareValues, getConverterMessage, getRequiredMessage, getValidator, getValidatorMessage, getValidators, getValue, getValueChangeListener, getValueChangeListeners, isEmpty, isLocalValueSet, isValid, markInitialState, processUpdates, removeValidator, removeValueChangeListener, resetValue, restoreState, saveState, setConverterMessage, setImmediate, setLocalValueSet, setRequired, setRequiredMessage, setValid, setValidator, setValidatorMessage, setValue, setValueChangeListener, validate, validateValue
getConverter, getLocalValue, setConverter
addClientBehavior, addFacesListener, broadcast, encodeBegin, encodeChildren, encodeEnd, findComponent, 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
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
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getConverter, getLocalValue, setConverter
public static final String COMPONENT_TYPE
public void processDecodes(FacesContext context)
processDecodes
in class UIInput
public void processValidators(FacesContext context)
processValidators
in class UIViewParameter
public Map<String,Object> getAttributes()
getAttributes
in class UIComponentBase
public String getStringValueFromModel(FacesContext context)
null
, then just return
null
instead of delegating to default implementation which would return an empty string when a
converter is attached.getStringValueFromModel
in class UIViewParameter
public String getSubmittedValue()
getSubmittedValue
in interface EditableValueHolder
getSubmittedValue
in class UIViewParameter
public void setSubmittedValue(Object submittedValue)
setSubmittedValue
in interface EditableValueHolder
setSubmittedValue
in class UIViewParameter
public String getDefault()
null
or empty.null
or empty.public void setDefault(String defaultValue)
null
or empty.defaultValue
- The default value in case the actual request parameter is null
or empty.public boolean isRequired()
isRequired
in interface EditableValueHolder
isRequired
in class UIInput
Copyright © 2012–2020 OmniFaces. All rights reserved.