h: selectOneMenu required = "true" возвращается к значению компонента при ошибке проверки - PullRequest
1 голос
/ 02 декабря 2011

У меня есть что-то подобное в форме создания / редактирования:

<h:selectOneMenu value="#{bean.value}" required="true" ... >
  <f:selectItem itemLabel="-- Select --" itemValue=""/>
  <f:selectItems .../>
</h:selectOneMenu>

В случае создания нового объекта проверка required работает, как и ожидалось.

В объекте редактированияВ случае, если я изменяю действительное значение на заполнитель "- Выбрать -", я получаю ошибку проверки с ожидаемым обязательным сообщением, потому что itemValue пусто (""); однако , HTML <select> возвращается к любой опции, уже выбранной из компонента, вместо сохранения недопустимого пользовательского ввода при отправке формы.

Чтобы повторить, required=true наh:selectOneMenu сам по себе работает нормально, генерируя ожидаемое сообщение - единственное, что неправильно, это значение, возвращающееся к значению компонента, вместо сохранения пустого переданного значения.(Я подтвердил с помощью панели инструментов разработчика Chrome, что пустая строка действительно отправляется для <select>.)

Почему это происходит?Точнее, почему h:selectOneMenu не ведет себя как h:inputText, где UIInput отображает неверный пользовательский ввод из формы и не обновляет его значение из компонента?Оба эти элемента управления расширяют один и тот же базовый класс UIInput и реализуют EditableValueHolder, поэтому я ожидаю, что их жизненный цикл будет вести себя одинаково.

Кроме того, чтобы уточнить, у меня нет параметра контекста INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL где-либо в файле web.xml.,

Это приложение JSF для Mojarra 2.1.3 / Glassfish 3.1.1.

...