Class UISelectMany
- All Implemented Interfaces:
EventListener,EditableValueHolder,PartialStateHolder,StateHolder,TransientStateHolder,ValueHolder,ComponentSystemEventListener,FacesListener,SystemEventListenerHolder
UISelectMany is a
UIComponent that represents the user's choice of a zero or
more items from among a discrete set of available options. The user
can modify the selected values. Optionally, the component can be
preconfigured with zero or more currently selected items, by storing
them as an array or
Collection in the value property of
the component.
This component is generally rendered as a select box or a group of checkboxes.
By default, the rendererType property must be set to
"javax.faces.Listbox". This value can be changed by
calling the setRendererType() method.
The Renderer for this component must
perform the following logic on getConvertedValue():
An array of primitives (such as
int[]). Look up the registered by-classConverterfor this primitive type.An array of objects (such as
Integer[]orString[]). Look up the registered by-classConverterfor the underlying element type.A
java.util.Collection. Do not convert the values.If the component has a
ValueExpressionforvalueand the type of the expression is an array, let targetForConvertedValues be a new array of the expected type.If the component has a
ValueExpressionforvalue, let modelType be the type of the value expression. If modelType is aCollection, do the following to arrive at targetForConvertedValues:Ask the component for its attribute under the key "
collectionType", without the quotes. If there is a value for that key, the value must be a String that is a fully qualified Java class name, or aClassobject, or aValueExpressionthat evaluates to a String or aClass. In all cases, the value serves to identify the concrete type of the class that implementsCollection. For discussion, this is called collectionType. Let targetForConvertedValues be a new instance ofCollectionimplemented by the concrete class specified in collectionType. If, collectionType can not be discovered, or an instance ofCollectionimplemented by the concrete class specified in collectionType cannot be created, throw aFacesExceptionwith a correctly localized error message. Note thatFacesExceptionis thrown instead ofConverterExceptionbecause this case would only arise from developer error, rather than end-user error.If there is no "
collectionType" attribute, callgetValue()on the component. The result will implementCollection. If the result also implementsCloneable, let targetForConvertedValues be the result of calling itsclone()method, then callingclear()on the clonedCollection. If unable to clone the value for any reason, log a message and proceed to the next step.If modelType is a concrete class, let targetForConvertedValues be a new instance of that class. Otherwise, the concrete type for targetForConvertedValues is taken from the following table. All classes are in the
java.utilpackage. All collections must be created with an initial capacity equal to the length of the values array from the request.If modelType is an instance of then targetForConvertedValues must be an instance of SortedSetTreeSetQueueLinkedListSetHashSetanything else ArrayList
If the component does not have a
ValueExpressionforvalue, let targetForConvertedValues be an array of typeObject.
Obtain the Converter using the following algorithm:
If the component has an attached Converter, use it.
If not, look for a ValueExpression for value
(if any). The ValueExpression must point to something that
is:
If for any reason a Converter cannot be found, assume
the type to be a String array.
Use the selected Converter (if any) to
convert each element in the values array from the request to the
proper type, and store the result of
each conversion in a data structure, called
targetForConvertedValues for discussion. Create
targetForConvertedValues using the following
algorithm.
Return targetForConvertedValues after populating it with the converted values.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe standard component family for this component.static final StringThe standard component type for this component.static final StringThe message identifier of theFacesMessageto be created if a value not matching the available options is specified.Fields inherited from class javax.faces.component.UIInput
CONVERSION_MESSAGE_ID, REQUIRED_MESSAGE_ID, UPDATE_MESSAGE_ID, VALIDATE_EMPTY_FIELDS_PARAM_NAMEFields inherited from class javax.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 -
Method Summary
Modifier and TypeMethodDescriptionprotected booleancompareValues(Object previous, Object value) Returntrueif the new value is different from the previous value.Return the identifier of the component family to which this component belongs.Object[]Return the currently selected values, ornullif there are no currently selected values.getValueBinding(String name) Deprecated.getValueExpression(String name) Return anyValueExpressionset forvalueif aValueExpressionforselectedValuesis requested; otherwise, perform the default superclass processing for this method.voidsetSelectedValues(Object[] selectedValues) Set the currently selected values, ornullto indicate that there are no currently selected values.voidsetValueBinding(String name, ValueBinding binding) Deprecated.This has been replaced bysetValueExpression(java.lang.String, javax.el.ValueExpression).voidsetValueExpression(String name, ValueExpression binding) Store anyValueExpressionspecified forselectedValuesundervalueinstead; otherwise, perform the default superclass processing for this method.protected voidvalidateValue(FacesContext context, Object value) In addition to the standard validation behavior inherited fromUIInput, ensure that any specified values are equal to one of the available options.Methods inherited from class javax.faces.component.UIInput
addValidator, addValueChangeListener, clearInitialState, decode, getConvertedValue, getConverterMessage, getRequiredMessage, getSubmittedValue, getValidator, getValidatorMessage, getValidators, getValue, getValueChangeListener, getValueChangeListeners, isEmpty, isImmediate, isLocalValueSet, isRequired, isValid, markInitialState, processDecodes, processUpdates, processValidators, removeValidator, removeValueChangeListener, resetValue, restoreState, saveState, setConverterMessage, setImmediate, setLocalValueSet, setRequired, setRequiredMessage, setSubmittedValue, setValid, setValidator, setValidatorMessage, setValue, setValueChangeListener, updateModel, validateMethods inherited from class javax.faces.component.UIOutput
getConverter, getLocalValue, setConverterMethods inherited from class javax.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, invokeOnComponent, isRendered, isTransient, processRestoreState, processSaveState, queueEvent, removeFacesListener, restoreAttachedState, saveAttachedState, setId, setParent, setRendered, setRendererType, setTransient, subscribeToEvent, unsubscribeFromEventMethods inherited from class javax.faces.component.UIComponent
encodeAll, getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, visitTreeMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface javax.faces.component.ValueHolder
getConverter, getLocalValue, setConverter
-
Field Details
-
COMPONENT_TYPE
The standard component type for this component.
- See Also:
-
COMPONENT_FAMILY
The standard component family for this component.
- See Also:
-
INVALID_MESSAGE_ID
The message identifier of the
FacesMessageto be created if a value not matching the available options is specified.- See Also:
-
-
Constructor Details
-
UISelectMany
public UISelectMany()Create a new
UISelectManyinstance with default property values.
-
-
Method Details
-
getFamily
Description copied from class:UIComponentReturn the identifier of the component family to which this component belongs. This identifier, in conjunction with the value of the
rendererTypeproperty, may be used to select the appropriateRendererfor this component instance. -
getSelectedValues
Return the currently selected values, or
nullif there are no currently selected values. This is a typesafe alias forgetValue(). -
setSelectedValues
Set the currently selected values, or
nullto indicate that there are no currently selected values. This is a typesafe alias forsetValue().- Parameters:
selectedValues- The new selected values (if any)
-
getValueBinding
Deprecated.this has been replaced bygetValueExpression(java.lang.String).Return any
ValueBindingset forvalueif aValueBindingforselectedValuesis requested; otherwise, perform the default superclass processing for this method.This method relies on the superclass to provide the
ValueExpressiontoValueBindingwrapping.- Overrides:
getValueBindingin classUIComponentBase- Parameters:
name- Name of the attribute or property for which to retrieve aValueBinding- Throws:
NullPointerException- ifnameisnull
-
setValueBinding
Deprecated.This has been replaced bysetValueExpression(java.lang.String, javax.el.ValueExpression).Store any
ValueBindingspecified forselectedValuesundervalueinstead; otherwise, perform the default superclass processing for this method.This method relies on the superclass to wrap the argument
ValueBindingin aValueExpression.- Overrides:
setValueBindingin classUIComponentBase- Parameters:
name- Name of the attribute or property for which to set aValueBindingbinding- TheValueBindingto set, ornullto remove any currently setValueBinding- Throws:
NullPointerException- ifnameisnull
-
getValueExpression
Return any
ValueExpressionset forvalueif aValueExpressionforselectedValuesis requested; otherwise, perform the default superclass processing for this method.- Overrides:
getValueExpressionin classUIComponent- Parameters:
name- Name of the attribute or property for which to retrieve aValueExpression- Throws:
NullPointerException- ifnameisnull- Since:
- 1.2
-
setValueExpression
Store any
ValueExpressionspecified forselectedValuesundervalueinstead; otherwise, perform the default superclass processing for this method.- Overrides:
setValueExpressionin classUIComponent- Parameters:
name- Name of the attribute or property for which to set aValueExpressionbinding- TheValueExpressionto set, ornullto remove any currently setValueExpression- Throws:
NullPointerException- ifnameisnull- Since:
- 1.2
-
compareValues
Return
trueif the new value is different from the previous value. Value comparison must not be sensitive to element order.- Overrides:
compareValuesin classUIInput- Parameters:
previous- old value of this componentvalue- new value of this component
-
validateValue
In addition to the standard validation behavior inherited from
UIInput, ensure that any specified values are equal to one of the available options. Before comparing each option, coerce the option value type to the type of this component's value following the Expression Language coercion rules. If the specified value is not equal to any of the options, enqueue an error message and set thevalidproperty tofalse.This method must explicitly support a value argument that is a single value or a value argument that is a
Collectionor Array of values.If
UIInput.isRequired()returnstrue, and the current value is equal to the value of an innerUISelectItemwhoseUISelectItem.isNoSelectionOption()method returnstrue, enqueue an error message and set thevalidproperty tofalse.- Overrides:
validateValuein classUIInput- Parameters:
context- TheFacesContextfor the current requestvalue- The converted value to test for membership.- Throws:
NullPointerException- ifcontextisnull
-
getValueExpression(java.lang.String).