jsf - tutorial - selectonemenu primefaces ejemplo
La mejor manera de agregar una opciĆ³n "nada seleccionada" a selectOneMenu en JSF (3)
Me preguntaba cuál sería la mejor o más fácil manera de permitir que un usuario seleccione nada en un selectOneMenu.
Mi ejemplo: tengo una lista de usuarios registrados y el administrador debería poder filtrar la lista de usuarios mostrados por algunos criterios. Estos criterios, como el tipo de uso (empleado, cliente, ...) pueden ser seleccionados por selectOneMenus, como este:
<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>
Cuando el correspondiente selectOneMenu está respaldado por una lista de POJOs utilizando un convertidor, ¿cómo puedo agregar un elemento a la lista que indique que el usuario no eligió ningún elemento específico? Actualmente tengo un objeto de uso simulado que muestra la etiqueta "---", pero esto está causando varios problemas en otras áreas de mi aplicación y no creo que esta sea la mejor solución.
Agregue un solo selectItem con valor nulo;
<h:selectOneMenu value="#{bean.question}" required="true" requiredMessage="Please select a question">
<f:selectItem itemValue="#{null}" itemLabel="Select" />
<f:selectItems value="#{bean.questions}" />
</h:selectOneMenu>
Podemos en primefaces (cuando tenemos que usar <p:selectOneMenu
... por alguna razón como usar <p:ajax
..) agregue el siguiente elemento vacío:
<f:selectItem itemValue="#{null}" itemLabel="--select--" itemDisabled="#{Mybean.value ne null}" />
Nota: En tal caso, no necesitamos las dos etiquetas siguientes:
hideNoSelectionOption="true"
y
noSelectionOption="true"
Simplemente establezca explícitamente el valor del elemento seleccionado en null
.
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItem itemValue="#{null}" itemLabel="--select--" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
No, una cadena vacía como itemValue=""
no es suficiente. Realmente tiene que ser null
. De lo contrario, se encontrará con un problema tal como se describe en esta Pregunta y respuesta: Utilizando un "Seleccione por favor" f: Seleccione el elemento con valor nulo / vacío dentro de ap: seleccione UnMenú .
Si el elemento es required="true"
y está utilizando JSF 2.x, entonces puede agregar noSelectionOption="true"
al elemento seleccionado. Si también establece hideNoSelectionOption="true"
en el componente de selección, ocultará la opción vacía en la lista una vez que el usuario final seleccione un elemento diferente, impidiendo de este modo volver a seleccionar la opción vacía.
<h:selectOneMenu value="#{bean.selectedItem}" hideNoSelectionOption="true">
<f:selectItem itemValue="#{null}" itemLabel="--select--" noSelectionOption="true" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>