在JSF中为selectOneMenu添加"未选择"选项的最佳方法

dws*_*dws 43 jsf selectonemenu

我想知道什么是允许用户在selectOneMenu中选择任何内容的最佳或最简单的方法.

我的例子:我有一个注册用户列表,管理员应该能够按一些标准过滤显示的用户列表.这些标准,如usertype(employee,customer,...)可以由selectOneMenus选择,如下所示:

<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

当相应的selectOneMenu由使用转换器的POJO列表支持时,如何将项添加到列表中,表明用户没有选择任何特定项?目前我有一个虚拟的usertype对象显示标签"---",但这在我的应用程序的其他方面引起了几个问题,我不认为这是最好的解决方案.

Bal*_*usC 99

只需将选择项值显式设置为null.

<h:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItem itemValue="#{null}" itemLabel="--select--" />
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

不,像一个空字符串itemValue=""是不够的.它真的必须null.否则你会遇到问题,如本问答所述:使用"请选择"f:selectItem在ap:selectOneMenu中使用null/empty值.

如果该项目恰好是required="true"您正在使用JSF 2.x,那么您可以添加noSelectionOption="true"到选择项目.如果您还设置hideNoSelectionOption="true"了选择组件,则一旦最终用户选择其他项目,它将隐藏列表中的空选项,从而无法重新选择空选项.

<h:selectOneMenu value="#{bean.selectedItem}" hideNoSelectionOption="true">
    <f:selectItem itemValue="#{null}" itemLabel="--select--" noSelectionOption="true" />
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

  • @bruno,该文档适用于10年前发布的JSF 1.1.请更新您的书签. (5认同)

小智 10

添加一个带有null值的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>
Run Code Online (Sandbox Code Playgroud)