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 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.

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.List. Assume that the element type is
java.lang.String, so no conversion is required.

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 or list from the request to the proper type. If the component
has a javax.faces.el.ValueBinding for value, create an array
of the expected type to hold the converted values. If the component
does not have a javax.faces.el.ValueBinding for value, create
an array of type Object. Store the created array
as the local value of the component, set the component's valid
state to true and return.

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 valid property to false.