添加“的最佳方式”;“未选择任何内容”;JSF中selectOneMenu的选项

添加“的最佳方式”;“未选择任何内容”;JSF中selectOneMenu的选项,jsf,selectonemenu,Jsf,Selectonemenu,我想知道让用户在SelectOne菜单中不选择任何内容的最佳或最简单的方法是什么 我的示例:我有一个注册用户列表,管理员应该能够根据一些标准筛选显示的用户列表。这些标准,如用户类型(员工、客户等)可以通过SelectOneMenu进行选择,如下所示: <h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}"> <f:selectItems value={myBean.

我想知道让用户在SelectOne菜单中不选择任何内容的最佳或最简单的方法是什么

我的示例:我有一个注册用户列表,管理员应该能够根据一些标准筛选显示的用户列表。这些标准,如用户类型(员工、客户等)可以通过SelectOneMenu进行选择,如下所示:

<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>


添加一个带有空值的selectItem

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

只需将select item值显式设置为
null


不,像
itemValue=“
这样的空字符串是不够的。它必须是
null
。否则,您将遇到本问答中所述的麻烦:

如果项目恰好是
required=“true”
并且您使用的是JSF2.x,那么您可以向所选项目添加
noSelectionOption=“true”
。仅当您还在选择组件上设置了
hideNoSelectionOption=“true”
时,此选项才有用。一旦最终用户选择了不同的项目,它将在列表中隐藏空选项,从而无法重新选择空选项



我们可以使用primefaces(当我们必须使用
时,如果值为null,则应抛出NullPointerException。@bruno,该文档是针对JSF 1.1的,10年前发布的。请更新您的书签。@BalusC,它不适用于转换器-它抛出NullPointerException(JSF 2.2)@guest:这只是所讨论的转换器中的一个bug。如果您不知道如何解决这个问题,或者找不到回答如何创建正确转换器的问题,请按“提问”按钮。@BalusC,itemValue=“{null}”或itemValue=“null”当项目列表的类型为object时工作正常。如果项目列表的值的类型为int呢?它会在验证时对所选值抛出java.lang.IllegalArgumentException。您可以使用此解决方案@user2918640@Kukeltje:选择其他值后,“选择”标签将保留在菜单上。但在我的解决方案中,“选择”选择任何其他选项后,标签将被禁用…此帖子不会向已给出的答案添加任何新内容。如果您同意某个答案,只需向上投票,而不是重复。堆栈溢出不像是一个老式的讨论论坛,每个人都会相互重复,陷入无法想象的混乱。@BalusC:hideNoSelectionOption=“true”和noSelectOption=“true”属性在您使用
<f:selectItem itemValue="#{null}" itemLabel="--select--"  itemDisabled="#{Mybean.value ne null}" />
hideNoSelectionOption="true"
noSelectionOption="true"