我想知道如何在Spring MVC应用程序中使用Spring Validator (而不是注解)验证表单中的嵌套对象列表。
class MyForm() {
String myName;
List<TypeA> listObjects;
}
class TypeA() {
String number;
String value;
}
如何创建MyFormValidator来验证listObjects并添加有关TypeA的编号和值的错误消息。
发布于 2012-10-01 20:59:15
public class MyFormValidator implements Validator {
@Override
public boolean supports(Class clazz) {
return MyForm.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
MyForm myForm = (MyForm) target;
for (int i = 0; i < myForm.getListObjects().size(); i++) {
TypeA typeA = myForm.getListObjects().get(i);
if(typeAHasAnErrorOnNumber) {
errors.rejectValue("listObjects[" + i + "].number", "your_error_code");
}
...
}
...
}
}
有趣的链接:
发布于 2014-08-14 21:15:26
对于嵌套验证,您可以执行以下操作:
public class MyFormValidator implements Validator {
private TypeAValidator typeAValidator;
@Override
public boolean supports(Class clazz) {
return MyForm.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
MyForm myForm = (MyForm) target;
typeAValidator = new TypeAValidator();
int idx = 0;
for (TypeA item : myForm.getListObjects()) {
errors.pushNestedPath("listObjects[" + idx + "]");
ValidationUtils.invokeValidator(this.typeAValidator, item, errors);
errors.popNestedPath();
idx++;
...
}
...
}
}
public class TypeAValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return TypeA.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
TypeA objTypeA = (TypeA)target;
ValidationUtils.rejectIfEmpty(errors, "number", "number.notEmpty");
}
}
希望这能有所帮助。
发布于 2015-08-28 06:51:36
我使用的一个方便的助手类-
public final class ValidationHelper {
public static <TEntity> void invokeNestedValidator(Validator validator, TEntity entity, Errors errors, String subPath) {
try {
errors.pushNestedPath(subPath);
ValidationUtils.invokeValidator(validator, entity, errors);
} finally {
errors.popNestedPath();
}
}
public static <TEntity> void invokeNestedValidatorForList(Validator validator, List<TEntity> entities, Errors errors, String subPathRoot) {
for (int index = 0; index < entities.size(); index++) {
invokeNestedValidator(validator, entities.get(index), errors, subPathRoot + "[" + index + "]");
}
}
private ValidationHelper() {}
}
https://stackoverflow.com/questions/12680730
复制相似问题