java.lang.Objectjavax.faces.component.UIComponent
javax.faces.component.UIComponentBase
javax.faces.component.UIOutput
javax.faces.component.UIInput
javax.faces.component.UISelectMany
All Implemented Interfaces:
EditableValueHolder, ValueHolder, PartialStateHolder, ComponentSystemEventListener, SystemEventListenerHolder
Direct Known Subclasses:
HtmlSelectManyCheckbox, HtmlSelectManyListbox, HtmlSelectManyMenu
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 javax.faces.render.Renderer for this component must
perform the following logic on getConvertedValue()
:
Obtain the javax.faces.convert.Converter using the following algorithm:
If the component has an attached javax.faces.convert.Converter , use it.
If not, look for a ValueExpression for value
(if any). The ValueExpression must point to something that
is:
An array of primitives (such as int[]
).
Look up the registered by-class javax.faces.convert.Converter
for this primitive type.
An array of objects (such as Integer[]
or
String[]
). Look up the registered by-class javax.faces.convert.Converter for the underlying element
type.
A java.util.Collection
.
Do not convert the values.
If for any reason a Converter
cannot be found, assume
the type to be a String array.
Use the selected javax.faces.convert.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.
If the component has a ValueExpression
for
value
and the type of the expression is an array, let
targetForConvertedValues be a new array of the expected
type.
If the component has a ValueExpression
for
value
, let modelType be the type of the value
expression. If modelType is a Collection
, 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 a Class
object, or a
ValueExpression
that evaluates to a String or a
Class
. In all cases, the value serves to identify the
concrete type of the class that implements Collection
.
For discussion, this is called collectionType. Let
targetForConvertedValues be a new instance of
Collection
implemented by the concrete class specified
in collectionType. If, collectionType can not be
discovered, or an instance of Collection
implemented by
the concrete class specified in collectionType cannot be
created, throw a javax.faces.FacesException with a correctly
localized error message. Note that FacesException
is
thrown instead of ConverterException
because this case
would only arise from developer error, rather than end-user
error.
If there is no "collectionType
" attribute, call
getValue()
on the component. The result will implement
Collection
. If the result also implements
Cloneable
, let targetForConvertedValues be the
result of calling its clone()
method, then calling
clear()
on the cloned Collection
. 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.util
package. 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 |
---|---|
SortedSet |
TreeSet |
Queue |
LinkedList |
Set |
HashSet |
anything else | ArrayList |
If the component does not have a ValueExpression
for value
, let targetForConvertedValues be an
array of type Object
.
Return targetForConvertedValues after populating it with the converted values.
Field Summary | ||
---|---|---|
public static final String | COMPONENT_TYPE | The standard component type for this component. |
public static final String | COMPONENT_FAMILY | The standard component family for this component. |
public static final String | INVALID_MESSAGE_ID | The message identifier of the javax.faces.application.FacesMessage to be created if a value not matching the available options is specified. |
Fields inherited from javax.faces.component.UIInput: |
---|
COMPONENT_TYPE, COMPONENT_FAMILY, CONVERSION_MESSAGE_ID, REQUIRED_MESSAGE_ID, UPDATE_MESSAGE_ID, VALIDATE_EMPTY_FIELDS_PARAM_NAME, validators |
Fields inherited from javax.faces.component.UIOutput: |
---|
COMPONENT_TYPE, COMPONENT_FAMILY |
Constructor: |
---|
Create a new UISelectMany instance with default property values. |
Method from javax.faces.component.UISelectMany Summary: |
---|
compareValues, getFamily, getSelectedValues, getValueBinding, getValueExpression, setSelectedValues, setValueBinding, setValueExpression, validateValue |
Methods from javax.faces.component.UIOutput: |
---|
clearInitialState, getConverter, getFamily, getLocalValue, getValue, markInitialState, restoreState, saveState, setConverter, setValue |
Methods from java.lang.Object: |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method from javax.faces.component.UISelectMany Detail: |
---|
Return |
|
Return the currently selected values, or |
Deprecated! this - has been replaced by #getValueExpression(java.lang.String) .Return any ValueBinding set for This method relies on the superclass to provide the
|
Return any ValueExpression set for |
Set the currently selected values, or |
Deprecated! This - has been replaced by #setValueExpression(java.lang.String, javax.el.ValueExpression) .Store any ValueBinding specified for
This method relies on the superclass to wrap the argument
|
Store any ValueExpression specified for
|
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 the
This method must explicitly
support a value argument that is a single value or a value
argument that is a If #isRequired returns
|