Render an HTML option list.
Decode Behavior
This section documents the decode behavior for all
renderers
that handle UISelectMany
or UISelectOne
components.
Decode Behavior for
UISelectMany
components
Obtain the Map
from the
"requestParameterValuesMap" property of the
ExternalContext
. If the Map
contains
an entry for the "clientId" of the component, pass the value of
the entry, cast to a String []
, to the
setSubmittedValue()
method of the
component, which
must be an EditableValueHolder
. If the
Map
does not contain an entry, create an
empty
String
array and call
setSubmittedValue()
with it.
Please check the javadoc for UISelectMany.getConvertedValue() for additional requirements for renderers that render this kind of component.
Decode Behavior for
UISelectOne
components
Obtain the Map
from the
"requestParameterMap"
property of the ExternalContext
. If there
is a
Map
entry for the "clientId" property of
the
component, pass it to the setSubmittedValue()
method
of the component. If the
Map
does not contain an entry, call
setSubmittedValue()
passing an empty
String
as the argument.
Encode Behavior
Render an HTML "select" element. Render the clientId of
the component as the value of the "name" attribute. If the
"styleClass"
attribute is specified, render its value as the value of the "class"
attribute on the "select" element. If the component is a
UISelectMany
instance, render "multiple" as
the value of the
"multiple" attribute. If the "size" attribute is specified, render
its
value as the value of the "size" attribute. Otherwise use the number
of
items as the value of the "size" attribute.
Rendering the "option" elements
The only valid children of this component are
UISelectItem
or UISelectItems
instances. Iterate over the children of this component, and accrue
a list of jakarta.faces.model.SelectItem
instances.
If the current child is a
SelectItem
whose noSelctionProperty
is
true
, and the UISelectOne
or
UISelectMany
parent of this option has one
or more
selected values that are not the "no selection"
SelectItem
, and the
component has a
"hideNoSelectionLabel" attribute whose value is true
,
then the current option, which is the "no selection" option, must
not be rendered. If the current child is a
UISelectItem
create a SelectItem
instance
from its itemValue, itemLabel
, itemEscaped
, and
itemDescription
properties, add it to the
list. If
the current child is a UISelectItems
instance, call
its getValue()
method. If the result is a
SelectItem
bean, add it to the list. If the
result
is an array of SelectItem
beans, add each
one to the
list. If the result is a Collection
of
SelectItem
beans, add each one to the list.
If the
result is a Map
, create a SelectItem
bean for each entry in the Map
using the
key as the
label, the value as the value, and null
as
the
description.
Iterate over the list of SelectItem
beans. If the
current element is a SelectItemGroup
,
render an
"optgroup" element with a "label" attribute, the value of which is
the "label" property from the current element, then call
getSelectItems()
and render each element as
below.
If the current element is not a SelectItemGroup
,
render an "option" element. Follow the conversion rules in the
spec to obtain a renderable String
from the
"value"
property of the current element, render that as the value of the
"value" atribute. Now it is time to see if the current element is
the selected value. Call its getSubmittedValue()
method, casting the result to an Object []
,
otherwise
the component must be a UISelectOne
instance, call
its getSubmittedValue()
method and create
an
Object []
around the result. Determine the
type of
the resultant array, if the resultant array is non-null, otherwise
the type is String
. Coerce the current item
value to
this type following the Expression Language coercion rules. If
the resultant array is non-null, we look in the array for a value
that, when we pass the renderable value to its
equals()
method, it returns true
,
meaning the current element is selected. If the resultant array
is null
, if the component is a
UISelectMany
, call its getValue()
method. If the result is a List
obtain the
values in
the list as an array. Otherwise, the component must be a
UISelectOne
instance. Call its
getValue()
method, which must be an Object
array.
Look for an element in the resultant array that, 1. when we pass
the renderable value to its equals()
method, it
returns true
, or 2. if the renderable
value is null,
and there is a null element in the array, also conclude that the
current element is selected. Otherwise the current element is not
selected. Now, if the current value is selected, write out an
HTML boolean property "selected". If the current
SelectItem.isDisabled() returns true, render "disabled" as the
value of the "disabled" attribute. If the value of the escape
property is true, use the writeText()
method of
ResponseWriter
to write out the value of
the
label
property. Otherwise, use the
write()
method of the ResponseWriter
to
do so.
Info | Value |
---|---|
Component Type | jakarta.faces.HtmlSelectManyListbox |
Handler Class | None |
Renderer Type | jakarta.faces.Listbox |
Description | None |
Name | Required | Type | Description |
---|---|---|---|
converter | false | jakarta.el.ValueExpression
(must evaluate to jakarta.faces.convert.Converter )
| Converter instance registered with this component. |
converterMessage | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| A ValueExpression enabled attribute that, if present, will be used as the text of the converter message, replacing any message that comes from the converter. |
id | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| The component identifier for this component. This value must be unique within the closest parent component that is a naming container. |
immediate | false | jakarta.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating that this component's value must be converted and validated immediately (that is, during Apply Request Values phase), rather than waiting until Process Validations phase. |
rendered | false | jakarta.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating whether or not this component should be rendered (during Render Response Phase), or processed on any subsequent form submit. The default value for this property is true. |
required | false | jakarta.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating that the user is required to provide a submitted value for this input component. |
requiredMessage | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| A ValueExpression enabled attribute that, if present, will be used as the text of the validation message for the "required" facility, if the "required" facility is used. |
validator | false | jakarta.el.MethodExpression
(signature must match void validate(jakarta.faces.context.FacesContext,
jakarta.faces.component.UIComponent, java.lang.Object)
)
| MethodExpression representing a validator method that will be called during Process Validations to perform correctness checks on the value of this component. The expression must evaluate to a public method that takes FacesContext, UIComponent, and Object parameters, with a return type of void. |
validatorMessage | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| A ValueExpression enabled attribute that, if present, will be used as the text of the validator message, replacing any message that comes from the validator. |
value | false | jakarta.el.ValueExpression
(must evaluate to java.lang.Object )
| The current value of this component. |
valueChangeListener | false | jakarta.el.MethodExpression
(signature must match void
valueChange(jakarta.faces.event.ValueChangeEvent)
)
|
MethodExpression representing a value change listener method
that will be notified when a new value has been set for this
input component. The expression must evaluate to a public
method that takes a |
accesskey | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Access key that, when pressed, transfers focus to this element. |
collectionType | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
|
Optional
attribute that is a literal string that is the fully qualified
class name of a concrete class that implements
|
dir | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Direction indication for text that does not inherit directionality. Valid values are "LTR" (left-to-right) and "RTL" (right-to-left). |
disabled | false | jakarta.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating that this element must never receive focus or be included in a subsequent submit. A value of false causes no attribute to be rendered, while a value of true causes the attribute to be rendered as disabled="disabled". |
disabledClass | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| CSS style class to apply to the rendered label on disabled options. |
enabledClass | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| CSS style class to apply to the rendered label on enabled options. |
hideNoSelectionOption | false | jakarta.el.ValueExpression
(must evaluate to java.lang.Boolean )
|
Flag indicating that, if this component is activated by the user, The "no selection option", if any, must be hidden. |
label | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| A localized user presentable name for this component. |
lang | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Code describing the language used in the generated markup for this component. |
onblur | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when this element loses focus. |
onchange | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when this element loses focus and its value has been modified since gaining focus. |
onclick | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is clicked over this element. |
ondblclick | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is double clicked over this element. |
onfocus | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when this element receives focus. |
onkeydown | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a key is pressed down over this element. |
onkeypress | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a key is pressed and released over this element. |
onkeyup | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a key is released over this element. |
onmousedown | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is pressed down over this element. |
onmousemove | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is moved within this element. |
onmouseout | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is moved away from this element. |
onmouseover | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is moved onto this element. |
onmouseup | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is released over this element. |
readonly | false | jakarta.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating that this component will prohibit changes by the user. The element may receive focus unless it has also been disabled. A value of false causes no attribute to be rendered, while a value of true causes the attribute to be rendered as readonly="readonly". |
size | false | jakarta.el.ValueExpression
(must evaluate to int )
| Number of available options to be shown at all times. If not specified, all available options are shown. |
style | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| CSS style(s) to be applied when this component is rendered. |
styleClass | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Space-separated list of CSS style class(es) to be applied when this element is rendered. This value must be passed through as the "class" attribute on generated markup. |
tabindex | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Position of this element in the tabbing order for the current document. This value must be an integer between 0 and 32767. |
title | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
| Advisory title information about markup elements generated for this component. |
binding | false | jakarta.el.ValueExpression
(must evaluate to jakarta.faces.component.UIComponent )
| The ValueExpression linking this component to a property in a backing bean |
role | false | jakarta.el.ValueExpression
(must evaluate to java.lang.String )
|
Per the WAI-ARIA spec and its relationship to HTML5 (Section title ARIA Role Attriubute), every HTML element may have a "role" attribute whose value must be passed through unmodified on the element on which it is declared in the final rendered markup. The attribute, if specified, must have a value that is a string literal that is, or an EL Expression that evaluates to, a set of space-separated tokens representing the various WAI-ARIA roles that the element belongs to. It is the page author's responsibility to ensure that the user agent is capable of correctly interpreting the value of this attribute. |