Выбор переключателя JSF passthrough сбрасывается при ошибках проверки формы

У меня есть форма JSF 2.2, состоящая из текстового поля ввода и пары встроенных переключателей. Учитывая известные ограничения на группы переключателей в JSF 2.2, я использую метод, описанный BalusC в этом сообщении в блоге. Мы не можем перейти на JSF 2.3, так как это приложение Weblogic, и в настоящее время мы заблокированы на Weblogic 12.2 (JavaEE 7).

Хотя этот метод отлично работает при отправке действительной формы, проблема заключается в том, что при отправке недопустимой формы выбор переключателя пользователя теряется и он сбрасывается до последнего допустимого значения (или начального значения).

Вот пример того, как я определяю пару переключателей, используя h:inputHiddenэлемент и связывание его bindingатрибут с nameатрибуты отдельных переключателей (для идентификатора их группы).

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

1 ответ

Действительно, checkedатрибут сравнивает значение модели напрямую.

      pt:checked="#{modelBean.heightUnit eq 'CENTIMETERS' ? 'checked' : null}"

Значение модели обновляется во время UPDATE_MODEL_VALUESэтап, но он не будет выполнен, если во время проверки возникнет ошибка проверки. PROCESS_VALIDATIONSфаза.

По сути, вы хотите проверить отправленное значение вместо значения модели. Это уже покрыто логикой позади UIInput#getValue(). В вашем конкретном случае вы хотите сравнить со значением <h:inputHidden>вместо.

      pt:checked="#{hiddenHeightUnitSelection.value eq 'CENTIMETERS' ? 'checked' : null}"

Тем временем статья в блоге, на которую есть ссылка в вашем вопросе, была обновлена.

Другие вопросы по тегам