Обход проверки JSF для компонента UIInput - PullRequest
2 голосов
/ 14 декабря 2010

В этом и заключается проблема: проверка JSF продолжает переворачивать поле обратно к последнему известному значению.

Мы редактируем страницу, на которой компонент поддержки уже имеет значения.(частота = "еженедельно")

И мы должны показать значение по умолчанию "пожалуйста, выберите ..", даже если это значение не пройдет проверку (да, я просто хочу оставить пользователя на страницес сообщением об ошибке).

Можно ли разрешить пользователю выбирать «Выбрать ..» и не сбрасывать его до последнего удачного значения?

Пользователю не разрешено сохранятьочевидно, но мы хотим оставить их недопустимое значение выбранным.

  1. Пользователь добавляет новый объект, выбирая правильное значение из выпадающего списка
  2. Пользователь успешно сохраняет данные.
  3. Клики пользователей«редактировать» и отображать объект с известным значением («еженедельно»)
  4. пользователь меняет «еженедельно» на «выбрать»
  5. пользователь нажимает сохранить
  6. Отображается сообщение проверки (хорошо) но частота возвращается к последнему значению "еженедельно" (плохо, мне нужно, чтобы оно оставалось на "Пожалуйста, выберите .." и позволяло пользователю исправить выпадающий список вручную.

немедленное = "истина"не работает с inputComponents, только commandComponents.

1 Ответ

3 голосов
/ 14 декабря 2010

Я признаю это, я сообщал об этом более года назад как JSF выпуск 1299 . Это все еще не решено, так как имеет низкий приоритет. Это относится не только ко всем UIInput компонентам, но и к MenuRenderer, который отвечает за отображение элементов HTML <select>. Все остальные элементы ввода HTML ведут себя так, как и следовало ожидать, переданное значение будет отображаться повторно (ну, на самом деле это тоже ничего).

Поскольку вы уже работаете с JSF 2.0, я предлагаю вам решить эту проблему с небольшой помощью f:ajax, чтобы раскрывающийся список не отображался повторно и, следовательно, сохранял свой выбор.

<h:selectOneMenu id="frequency" value="#{bean.frequency}" required="true">
    <f:selectItems value="#{bean.frequencies}" />
    <f:ajax render="frequencyMessage" />
</h:selectOneMenu>
<h:message id="frequencyMessage" for="frequency" />

Дополнительным преимуществом является то, что конечный пользователь имеет мгновенную обратную связь, и это лучше для пользовательского опыта.

...