У меня есть форма с валидатором в одном поле. У меня два 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".