我想知道允许用户在selectOneMenu中选择任何内容的最佳或最简单方法是什么。
我的示例:我有一个注册用户列表,管理员应该能够按一些标准过滤显示的用户列表。这些标准,如usertype(employee,customer,...)可以由selectOneMenus选择,如下所示:
<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>
当使用转换器的POJO列表支持相应的selectOneMenu时,如何在列表中添加项目,表明用户没有选择任何特定项目?目前我有一个显示标签“---”的虚拟usertype对象,但这在我的应用程序的其他方面引起了一些问题,我不认为这是最好的解决方案。
答案 0 :(得分:93)
只需将选择项值明确设置为null
。
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItem itemValue="#{null}" itemLabel="--select--" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
不,像itemValue=""
这样的空字符串是不够的。它必须是null
。否则,您遇到了问题,如本问答&评注:Using a "Please select" f:selectItem with null/empty value inside a p:selectOneMenu。
如果该项目恰好是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>
答案 1 :(得分:10)
使用空值添加一个 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>
答案 2 :(得分:2)
我们可以在primefaces(当我们必须使用<p:selectOneMenu
...从某些原因使用<p:ajax
..)添加以下空项:
<f:selectItem itemValue="#{null}" itemLabel="--select--" itemDisabled="#{Mybean.value ne null}" />
注意:在这种情况下,我们不需要以下两个标签:
hideNoSelectionOption="true"
和
noSelectionOption="true"