При перекрестной проверке полей с помощью HibernateValidator не отображаются сообщения об ошибках

Я проверяю два поля, «пароль» и «confirmPassword» в форме на равенство, используяHibernateValidatorкак указано в этом ответе . Ниже приведен дескриптор ограничения (. интерфейс валидатора ).

package constraintdescriptor;

import constraintvalidator.FieldMatchValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;

@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface FieldMatch
{
    String message() default "{constraintdescriptor.fieldmatch}";
    Class[] groups() default {};
    Class[] payload() default {};

    /**
     * @return The first field
     */
    String first();

    /**
     * @return The second field
     */
    String second();

    /**
     * Defines several @FieldMatch annotations on the same element
     *
     * @see FieldMatch
     */
    @Target({TYPE, ANNOTATION_TYPE})
    @Retention(RUNTIME)
    @Documented
    public @interface List{
        FieldMatch[] value();
    }
}

Ниже приведен валидатор ограничения (. класс реализации ).


package constraintvalidator;

import constraintdescriptor.FieldMatch;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.beanutils.BeanUtils;

public final class FieldMatchValidator implements ConstraintValidator
{
    private String firstFieldName;
    private String secondFieldName;

    public void initialize(final FieldMatch constraintAnnotation) {
        firstFieldName = constraintAnnotation.first();
        secondFieldName = constraintAnnotation.second();
        //System.out.println("firstFieldName = "+firstFieldName+"   secondFieldName = "+secondFieldName);
    }

    public boolean isValid(final Object value, final ConstraintValidatorContext cvc) {
        try {
            final Object firstObj = BeanUtils.getProperty(value, firstFieldName );
            final Object secondObj = BeanUtils.getProperty(value, secondFieldName );
            //System.out.println("firstObj = "+firstObj+"   secondObj = "+secondObj);
            return firstObj == null && secondObj == null || firstObj != null && firstObj.equals(secondObj);
        }
        catch (final Exception e) {
            System.out.println(e.toString());
        }
        return true;
    }
}

Ниже приведен bean-компонент проверки, который сопоставлен со страницей JSP (, как указано commandName="tempBean"с тегом ).

package validatorbeans;

import constraintdescriptor.FieldMatch;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;

@FieldMatch.List({
    @FieldMatch(first = "password", second = "confirmPassword", message = "The password fields must match", groups={TempBean.ValidationGroup.class})
})

public final class TempBean
{        
    @NotEmpty(groups={ValidationGroup.class}, message="Might not be left blank.")
    private String password;
    @NotEmpty(groups={ValidationGroup.class}, message="Might not be left blank.")
    private String confirmPassword;

    public interface ValidationGroup {};

    //Getters and setters                
}

ОБНОВЛЕНИЕ

Все работает правильно и выполняет предназначенную проверку.Остается только одно: отображать указанное сообщение об ошибке над классом TempBeanвнутри @FieldMatchне отображается, т.е. только один вопрос:как отображать сообщения об ошибках на странице JSP при нарушении проверки?

(аннотация @NotEmptyк обоим полям passwordи confirmPasswordв классе TempBeanработает и выводит указанные сообщения о нарушении, с@FieldMatch)такого не происходит.

Я использую группу проверки на основе этого вопроса , как указано в этом блоге , и он работает хорошо, не прерывая отображение сообщений об ошибках (, как это могло бы быть. кажется ).


На странице JSP эти два поля указаны следующим образом.



    
    

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