Olá, implementei um validador customizado com BeanValidator, mas no momento de executar a action ele ignora completamente a existência deste validador. Oque tem de errado nesse código?
public class PasswordMatchValidator implements ConstraintValidator<PasswordMatch, Object>{
private String atributo;
private String atributoConfirmacao;
@Override
public void initialize(PasswordMatch constraintAnnotation) {
this.atributo = constraintAnnotation.atributo();
this.atributoConfirmacao = constraintAnnotation.atributoConfirmacao();
}
@Override
public boolean isValid(Object object, ConstraintValidatorContext context) {
boolean valido = false;
try {
Object valorAtributo = BeanUtils.getProperty(object, this.atributo);
Object valorAtributoConfirmacao = BeanUtils.getProperty(object, this.atributoConfirmacao);
valido = ambosSaoNull(valorAtributo, valorAtributoConfirmacao) || ambosSaoIguais(valorAtributo, valorAtributoConfirmacao);
} catch (Exception e) {
throw new RuntimeException("Erro recuperando valores dos atributos", e);
}
if (!valido) {
context.disableDefaultConstraintViolation();
String mensagem = context.getDefaultConstraintMessageTemplate();
ConstraintViolationBuilder violationBuilder = context.buildConstraintViolationWithTemplate(mensagem);
violationBuilder.addPropertyNode(atributoConfirmacao).addConstraintViolation();
}
return valido;
}
private boolean ambosSaoIguais(Object valorAtributo, Object valorAtributoConfirmacao) {
return valorAtributo != null && valorAtributo.equals(valorAtributoConfirmacao);
}
private boolean ambosSaoNull(Object valorAtributo, Object valorAtributoConfirmacao) {
return valorAtributo == null && valorAtributoConfirmacao == null;
}
}
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { PasswordMatchValidator.class })
public @interface PasswordMatch {
@OverridesAttribute(constraint = Pattern.class, name = "message")
String message() default "As senhas não conferem";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String atributo();
String atributoConfirmacao();
}
@AtributoConfirmacao(atributo = "senha", atributoConfirmacao = "confirmacaoSenha", message = "Confirmação da senha não confere")
@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
//continua
}
Esse validador nunca é chamado