Как пропустить проверку при нажатии на определенную кнопку?

У меня есть форма с валидатором в одном поле. У меня два h:commandButton s: Ok и Cancel. Когда я ввожу неверные данные и нажмите "Отмена", я получаю сообщение проверки. Что я должен делать, чтобы валидатор не запускался, когда я нажимаю "Отменить"?

Ответ 1

Если вы не используете ajax или все еще используете JSF 1.x, и вам действительно нужно вызвать бизнес-действие в методе cancel() (т.е. просто перезагрузка страницы недостаточна), тогда ваш лучший выбор для добавления кнопки immediate="true" к кнопке. Таким образом, все поля ввода, которые не имеют immediate="true", будут пропущены при обработке.

<h:commandButton value="Cancel" action="#{bean.cancel}" immediate="true" />

В JSF 2.x гораздо лучше отправить форму <f:ajax>, которая по умолчанию обрабатывает только @this вместо @form.

<h:commandButton value="Cancel" action="#{bean.cancel}">
    <f:ajax />
</h:commandButton>

Если вы хотите перейти на другую страницу, добавьте ?faces-redirect=true к результату в методе cancel().

Или, если вам вообще не нужно вообще вызывать какое-либо деловое действие, просто используйте <h:button>, в котором вы прямо указываете результат (неявный) результат навигации.

<h:button value="Cancel" outcome="previouspage" />

Это будет в основном перезагрузка страницы по запросу GET. <h:button> не существует в JSF 1.x, но вы также можете использовать для этого простой HTML + JS.

См. также:

Ответ 2

немедленный = "правда" сделал свое дело для меня. В моей форме нет других кнопок действий с немедленным = "true".

Спасибо @BalusC

Ответ 3

немедленный = "правда" сделал свое дело для меня. В моей форме нет других кнопок действий с немедленным = "true".