Я взял следующий пример запуска BalusCи немного изменил его добавив кнопку отправки и дополнительные сообщения h: и удалив f:ajax
из h:inputSecret's
(по какой-то причине удалена причина f:ajax
при Я оставляю первый h:inputSecret
, он сразу же отображает ошибку «требуется значение» для второго h:inputSecret
- но у пользователя нет возможности ввести его. .???
Хорошо, короче говоря:
Я пытаюсь выяснить, как можно отобразить ошибки проверки относительно обоих полей пароля (что пароли не равны) в глобальные h:messages, а не отдельные h:message полей пароля
Я хочу, чтобы required="true" отображалось в
Но прямо сейчас сообщение проверки (сгенерированное моим исключением) и required= "true" отображаются там же
Вот код:
И дополнительный h:commandButton
с h:messages
под этим кодом:
@FacesValidator("confirmPasswordValidator")
public class ConfirmPasswordValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
String password = (String) value;
String confirm = (String) component.getAttributes().get("confirm");
if (password == null || confirm == null) {
return; // Just ignore and let required="true" do its job.
}
if (!password.equals(confirm)) {
throw new ValidatorException(new FacesMessage("Passwords are not equal."));
}
}
}
Также
Заранее спасибо,
Решение (спасибо BalusC)
изменил
на
и
String confirm = (String) component.getAttributes().get("confirm");
на
UIInput confirmPasswordComponent = (UIInput) component.getAttributes().get("confirm");
String confirm = (String) confirmPasswordComponent.getSubmittedValue();
и
throw new ValidatorException(new FacesMessage("Passwords are not equal."));
на
context.addMessage(null, new FacesMessage("Passwords are not equal."));
context.validationFailed();
((UIInput) component).setValid(false);
confirmPasswordComponent.setValid(false);
return;