Как я могу отобразить ValidatorException и required=“true” одного и того же поля ввода в разных элементах сообщения

Я взял следующий пример запуска 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;

10
задан Community 23 May 2017 в 12:06
поделиться