Me preguntaba cuál sería el mejor o de forma más sencilla para permitir a un usuario seleccionar nada en un selectOneMenu.

Mi ejemplo: yo tengo una lista de usuarios registrados y el administrador debe ser capaz de filtrar la lista de usuarios por parte de algunos criterios. Estos criterios, como el usertype (empleados, clientes, …) puede ser elegido 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 el uso de un convertidor, ¿cómo puedo agregar un elemento a la lista, lo que indica que el usuario no ha seleccionado ningún elemento específico? Actualmente tengo un maniquí usertype objeto de mostrar la etiqueta «—«, pero esta es la causa de varios problemas en otras áreas de mi aplicación y no creo que esta sea la mejor solución.

InformationsquelleAutor dws | 2012-07-06

3 Comentarios

  1. 96

    Acaba de establecer explícitamente seleccione el elemento de valor para 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 corre en problemas, como se describe en este Q&A: El uso de un «por Favor, seleccione» f:selectItem con null/valor vacío en el interior de una p:selectOneMenu.

    Si el elemento de pasar a ser required="true" y está usando JSF 2.x, entonces usted podría agregar noSelectionOption="true" al seleccionar el elemento. Esto sólo es útil si usted también conjunto hideNoSelectionOption="true" en la selección de componentes. Luego ocultar el vacío de la opción en la lista una vez que el usuario final selecciona un elemento diferente, por medio de la presente lo que es imposible volver a seleccionar el vacío de la opción.

    <h:selectOneMenu value="#{bean.selectedItem}" hideNoSelectionOption="true">
        <f:selectItem itemValue="#{null}" itemLabel="--select--" noSelectionOption="true" />
        <f:selectItems value="#{bean.availableItems}" />
    </h:selectOneMenu>
    • docs.oracle.com/cd/E17802_01/j2ee/j2ee/javaserverfaces/1.1_01/… Dice da un NullPointerException debe ser desechado cuando el valor es null.
    • que la documentación es para JSF 1.1, publicada +10 años. Por favor, actualice sus marcadores.
    • no funciona con converter – Se lanza NullPointerException (JSF 2.2).
    • Eso es sólo un error en el convertidor en cuestión. Presione el botón «hacer una Pregunta» botón si usted no tiene idea de cómo arreglar eso o no se pudo encontrar preguntas que respuestas, ¿cómo crear un convertidor adecuado.
    • itemValue=»#{nulo}» o itemValue=»null» está trabajando bien cuando la lista de elementos es de tipo object. ¿Qué pasa si la lista de elementos de valor es de tipo int? Lanza de java.lang.IllegalArgumentException los valores seleccionados en caso de validación.
    • ¿HideNoSelectionOption trabajo para primefaces <p:selectOneMenu>?
    • hideNoSelectionOption no está funcionando aquí.

  2. 10

    Agregar un solo selectItem con valor null;

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

    Podemos en primefaces (cuando tenemos que usar <p:selectOneMenu… por algún motivo, como el uso de <p:ajax..) agregar el siguiente elemento vacío:

    <f:selectItem itemValue="#{null}" itemLabel="--select--"  itemDisabled="#{Mybean.value ne null}" />

    Nota: En este caso no necesitamos las dos siguientes etiquetas:

    hideNoSelectionOption="true"

    y

    noSelectionOption="true"
    • Usted puede utilizar esta solución @user2918640
    • Cómo es esto diferente de la de 8 upvoted respuesta?
    • El «select» de la etiqueta se mantendrá en el menú después de elegir a otro valor.Pero en mi solución, el «select» de la etiqueta será deshabilitado después de elegir cualquier otra opción…
    • Este post no aporta nada nuevo a la ya dada respuestas. Si usted acepta una respuesta, sólo upvote en lugar de repetirlo. Desbordamiento de pila no es como un antiguo foro de discusión en donde todos se repite cada uno de los otros en un undigestable lío.
    • hideNoSelectionOption=»true» y noSelectionOption=»true» atributos no tienen un efecto en caso de que usted usa <p:selectOneMenu en lugar de <h:selectOneMenu que user2918640 le preguntó acerca de como un comentario sobre su solución.Yo habría añadido un comentario después de él, pero no tengo la reputación suficiente para hacerlo como soy nuevo en stackoverflow. Por lo tanto, creo que es una buena idea para post como solución en su lugar.Yo no estaba tratando de repetir a usted y a causa de un «undigestable lío» como usted ha dicho.Por último, muchas gracias por tus posts como usted ha ayudado mucho en JSF…

Dejar respuesta

Please enter your comment!
Please enter your name here