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