Лучший способ добавить параметр "ничего не выбран" в selectOneMenu в JSF
Мне было интересно, какой лучший или простой способ позволить пользователю ничего не выбирать в selectOneMenu.
Мой пример: у меня есть список зарегистрированных пользователей, и администратор должен иметь возможность фильтровать список отображаемых пользователей по некоторым критериям. Эти критерии, такие как usertype (employee, customer,...), могут быть выбраны selectOneMenus, например:
<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>
Когда соответствующий selectOneMenu подкрепляется списком POJO с помощью конвертера, как я могу добавить элемент в список, указывающий, что пользователь не выбрал какой-либо конкретный элемент? В настоящее время у меня есть фиктивный объект usertype, отображающий метку "---", но это вызывает ряд проблем в других областях моего приложения, и я не думаю, что это лучшее решение.
Ответы
Ответ 1
Просто явно установите значение элемента выбора null
.
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItem itemValue="#{null}" itemLabel="--select--" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
Нет, пустой строки, такой как itemValue=""
, недостаточно. Это действительно должно быть null
. В противном случае вы столкнетесь с проблемами, как описано в этом разделе Q & A: , используя " выберите " f: selectItem с нулевым/пустым значением внутри 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>
Ответ 2
Добавьте единственный 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>
Ответ 3
Мы можем в простых гранях (когда мы должны использовать <p:selectOneMenu
... по какой-то причине, например, используя <p:ajax
..), добавьте следующий пустой элемент:
<f:selectItem itemValue="#{null}" itemLabel="--select--" itemDisabled="#{Mybean.value ne null}" />
Примечание. В этом случае нам не нужны следующие два тега:
hideNoSelectionOption="true"
и
noSelectionOption="true"