При отправке jsf валидатор selectOneMenu запускается только в том случае, если установлено required=true. Почему?

Я обнаружил, что валидатор jsf, привязанный к selectOneMenu, при отправке вызывается только тогда, когда selectOneMenu имеет required="true". Как я могу разрешить это, чтобы вызвать валидатор без этого атрибута?


person Daggeto    schedule 17.01.2012    source источник


Ответы (1)


Я обнаружил, что валидатор jsf, привязанный к selectOneMenu, при отправке вызывается только тогда, когда selectOneMenu имеет required="true".

Это действительно по спецификации. Кстати, это относится и ко всем другим элементам ввода.


Как я могу решить эту проблему, чтобы вызывать валидатор без этого атрибута?

Вы не можете. Просто укажите атрибут required="true", если вам требуется, чтобы конечный пользователь выбрал элемент. По умолчанию это необязательно, потому что могут быть обстоятельства, когда вам не требуется, чтобы конечный пользователь выбирал элемент.

person BalusC    schedule 17.01.2012
comment
Итак, как я могу выполнить требуемую проверку поля только в валидаторе, потому что в моем случае мне нужно сделать запрос к серверу с пустым значением selectMenu, но я не могу этого сделать, когда установлен атрибут required = true. - person Daggeto; 17.01.2012
comment
То есть допустимо пустое значение? Тогда я вообще не понимаю вашей проблемы/беспокойства. Каковы конкретные функциональные требования? Какую проверку вы хотели бы выполнить? - person BalusC; 17.01.2012
comment
Выпадающий список с пустым значением, при выборе пустого значения другой элемент должен быть скрыт. Поэтому я добавил a4j:support onchange, чтобы обновить значение раскрывающегося списка на заднем компоненте и повторно отобразить динамический элемент. Динамический элемент виден с помощью rendered=condition. Проблема заключается в том, что я устанавливаю dropDown в значение required и не обновляю значение bean-компонента для выбранного пустого значения. - person Daggeto; 17.01.2012
comment
Я не понимаю конкретной проблемы. Возможно, вы слишком усложнили подход к установке атрибута rendered. Вы можете просто установить его на rendered="#{not empty bean.selectedValue}" и позволить a4j:support повторно визуализировать этот компонент. В будущем постарайтесь спрашивать о реальной конкретной проблеме, а не задавать довольно риторический вопрос. - person BalusC; 17.01.2012