Я понимаю, что вы хотите фильтровать на основе поля ввода name
.<p:commandButton>
отправляет по умолчанию ajax-запрос и имеет атрибут process
, в котором вы можете указать, какие компоненты вы хотите обработать во время отправки.В вашем конкретном случае вы должны затем обработать только поле ввода name
и текущую кнопку (чтобы было вызвано ее действие).
<p:commandButton process="@this name" ... />
Атрибут process
может принимать разделенную пробелами коллекцию (относительных) идентификаторов клиентов компонентов, где @this
относится к текущему компоненту.По умолчанию используется значение от <p:commandButton>
до @form
(которое охватывает все поля ввода текущей формы и нажатой кнопки), поэтому все они были проверены в вашей первоначальной попытке.В приведенном выше примере все остальные поля ввода не будут обработаны (и, следовательно, также не проверены).
Если вы, однако, намереваетесь пропустить проверку required
для всех полей всякий раз, когдасоответствующая кнопка была нажата, так что вы можете в конечном итоге обработать несколько полей, которые не обязательно должны быть заполнены all , тогда вам нужно сделать условное выражение required="true"
, которое проверяет, является ли кнопканажата или нет.Например, пусть он оценивает true
только при нажатии кнопки сохранения:
<p:inputText ... required="#{not empty param[save.clientId]}" />
...
<p:inputText ... required="#{not empty param[save.clientId]}" />
...
<p:commandButton binding="#{save}" value="Save" ... />
Таким образом, он не будет подтвержден как required="true"
при нажатии другой кнопки.Хитрость в приведенном выше примере заключается в том, что имя нажатой кнопки (которая по сути является идентификатором клиента) было отправлено в качестве параметра запроса, и вы можете просто проверить его наличие в карте параметров запроса.
См. Также: