I have one registration page which uses custom valiadtor
public class CustomValidator implements Validator {
private Validator validator;
public Custom
You could do this
public boolean supports(Class clazz) {
return Registration.class.equals(clazz) || Another.class.equals(clazz);
}
Then your validate should do something like this
public void validate(Object target, Errors errors) {
validator.validate(target, errors);
String password = null;
String confirm = null;
if (target instanceof Registration) {
Registration registration = (Registration) target;
password = registration.getPassword();
confirm = registration.getConfirm_password();
} else if (target instanceof Another) {
Another another = (Another) target;
password = another.getPassword();
confirm = another.getConfirm_password();
}
if (! confirm.equals(password())) {
errors.rejectValue("confirm_password", "confirm_password.confirm");
}
}
I don't think you should use this probably it is better to use to separate classes is better for readability, and reduces complexity. To introduce hierarchy in your validators or Model objects (Vistor pattern) is not the best solution.
It appears you only want to validate 2 classes because you want to duplicate the 'confirm password' validation where you have 2 password fields that should match. Instead, why not simply pass an interface to the validator?
public void validate(IPasswordContainer target, Errors errors) {
if(!target.getConfirm_password().equals(target.getPassword())) {
errors.rejectValue("confirm_password", "confirm_password.confirm");
}
}
public boolean supports(Class clazz) {
return IPasswordContainer.class.equals(clazz);
}