usando tutorial selectitems ejemplo dinamico jsf selectonemenu

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>