我想验证包含在另一个表单对象中的表单对象。我有这样的事情:
@Controller
public class FormController {
@RequestMapping(method = RequestMethod.POST)
public void process(@ModelAttribute("form") @Valid FormObject formObject,
BindingResult result) {
...
@InitBinder("form")
protected void initBinder(WebDataBinder binder) {
binder.setValidator(customFormValidator);
}
}
public class FormObject {
@Valid
private FormObject2 formObject2;
}
// This is the class that needs to be validated.
public class FormObject2 {
@NotEmpty
private String name;
}
}
我遇到的问题是我希望对象formObject2由另一个自定义验证器验证(例如“customFormValidator2”),但我找不到如何注册它。如果我这样说,弹簧验证器将验证第二种形式。
我已经尝试在customFormValidator中验证第二种形式,但是第二种形式的错误路径与第一种形式无关,我无法在jsp页面中显示错误。
我已经像这样构建了我的表单对象,因为我可能需要在其他表单中使用第二个表单,并且通过这样做我使其更加模块化。
我有可能做的事吗?你有更好的建议吗?
答案 0 :(得分:0)
您可以使用自定义验证程序验证form Object2
,如
public void process(@ModelAttribute("form") @Valid FormObject formObject,
BindingResult result) {
customFormValidator2.validate(formObject.getFormObject2(), result);
}
删除@Valid
以删除JSR验证
public class FormObject {
// @Valid REMOVE THIS
private FormObject2 formObject2;
}
此外,您可以将路径属性用于嵌套类,例如
<form:input path="formObject2.any_property_name">
您也可以毫无问题地使用相同的路径进行错误 有关详细信息,请查看此link。