向JSF中的selectOneMenu添加“nothing selected”选项的最佳方法

我想知道什么是允许用户在selectOneMenu中不select任何东西的最好或最简单的方法。

我的例子:我有一个注册用户的列表,pipe理员应该能够过滤一些标准的显示用户列表。 这些标准,如usertype(employee,customer,…)可以通过selectOneMenus来select,如下所示:

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

当使用转换器将相应的selectOneMenu作为POJO列表的后备时,如何将一个项目添加到列表中以指示用户没有select任何特定的项目? 目前我有一个虚拟usertype对象显示标签“—”,但这在我的应用程序的其他领域造成了一些问题,我不认为这是最好的解决scheme。

只需明确地将select项目值设置为null

 <h:selectOneMenu value="#{bean.selectedItem}"> <f:selectItem itemValue="#{null}" itemLabel="--select--" /> <f:selectItems value="#{bean.availableItems}" /> </h:selectOneMenu> 

不,像itemValue=""这样的空string是不够的。 它真的必须是null 。 否则,您将遇到本问答中所述的问题: 使用“Please select”f:selectItem,其中包含空值/空值,在ap:selectOneMenu中 。

如果项目碰巧是required="true"并且您使用的是JSF 2.x,那么您可以将noSelectionOption="true"添加到select项目中。 如果您还在select组件上设置了hideNoSelectionOption="true" ,则一旦enduserselect了不同的项目,它将隐藏列表中的空白选项,因此无法重新select空白选项。

 <h:selectOneMenu value="#{bean.selectedItem}" hideNoSelectionOption="true"> <f:selectItem itemValue="#{null}" itemLabel="--select--" noSelectionOption="true" /> <f:selectItems value="#{bean.availableItems}" /> </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> 

我们可以在primefaces(当我们必须使用<p:selectOneMenu …从某种原因如使用<p:ajax ..)添加以下空项目:

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

注意:在这种情况下,我们不需要以下两个标签:

 hideNoSelectionOption="true" 

 noSelectionOption="true"