Witam,
napisałem sobie taki oto validator
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface FieldMatch {
String message() default "{password.match}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String getFirstField();
String getSecondField();
}
public class FieldMatchValidator implements ConstraintValidator<FieldMatch, Object> {
private String firstFieldName;
private String secondFieldName;
@Override
public void initialize(final FieldMatch constraintAnnotation) {
firstFieldName = constraintAnnotation.getFirstField();
secondFieldName = constraintAnnotation.getSecondField();
}
@Override
public boolean isValid(final Object value, final ConstraintValidatorContext context) {
try {
final Object firstField = BeanUtils.getProperty(value, firstFieldName);
final Object secondField = BeanUtils.getProperty(value, secondFieldName);
if ((String.valueOf(firstField).equals(String.valueOf(secondField)) && firstField != null && secondField != null)) {
return true;
}
} catch (final Exception ignore) {
}
return false;
}
}
którego używam w taki sposób:
@FieldMatch(getFirstField = "password", getSecondField = "repeatPassword")
nad definicją encji. password i repeatPassword to nazwy pól do porównania przy validacji. No i generalnie validator działa, nie przepuszcza, ale gdzie jest problem
Domyślna wiadomość, zamiast być wysyłana do widoku jak w przypadku innych validatorów, których adnotacje umieszczone są bezpośrednio nad polami w klasie, jest wysyłana do konsoli, a w widoku jedyne co się dzieje, to brak przejścia dalej...
Ma ktoś jakiś pomysł jak rozwiązać to zagadnienie ?
Pozdrawiam