1

我想验证另一个表单对象中包含的表单对象。我有这样的事情:

@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”)验证,但我找不到如何注册它。如果我让它这样,spring 验证器将验证第二种形式。

我已经尝试在 customFormValidator 内部验证第二个表单,但是第二个表单中的错误路径与第一个表单无关,我无法在 jsp 页面中显示错误。

我已经像这样构造了我的表单对象,因为我可能需要在其他表单中使用第二个表单,通过这样做,我使它更加模块化。

我想做的事有可能吗?你有更好的建议吗?

4

1 回答 1

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">  

您也可以对错误使用相同的路径而不会出现任何问题。
检查此链接以获取更多详细信息。

于 2012-07-11T06:33:54.773 回答