Forms SpringWeb:如何在表单提交时使用SpringValidator自动验证表单对象

Forms SpringWeb:如何在表单提交时使用SpringValidator自动验证表单对象,forms,spring,validation,Forms,Spring,Validation,我使用SpringValidator进行表单验证。下面是我的代码结构。如您所见,我必须在POST方法中手动调用validate。是否有任何方法可以在不调用validate()的情况下将验证器连接到表单处理中 请注意,我的域对象(MyModel)是一个POJO,没有任何字段级注释,如@NotNull等 非常感谢你的帮助 @Controller public class FormTest extends MyController { ..... @Autowired pr

我使用SpringValidator进行表单验证。下面是我的代码结构。如您所见,我必须在POST方法中手动调用validate。是否有任何方法可以在不调用validate()的情况下将验证器连接到表单处理中

请注意,我的域对象(MyModel)是一个POJO,没有任何字段级注释,如@NotNull等

非常感谢你的帮助

@Controller
public class FormTest extends MyController {

    .....

    @Autowired
    private MyValidator myValidator; // implementing Spring's Validator interface
    ......

    @RequestMapping(value={"/formtest"}, method=RequestMethod.GET)
    public String formGet(HttpServletRequest request, 
            @RequestParam(value="id", required = false) Long id,
            Map<String, Object> map) {
       return "/form";
    }

    @RequestMapping(value={"/formtest"}, method=RequestMethod.POST)
    public String formPost(HttpServletRequest request, 
            @ModelAttribute("command") MyModel m,
            @RequestParam(value="id", required = false) Long id,
            Map<String, Object> map,
            BindingResult result, 
            SessionStatus status) {

            myValidator.validate(m, result); //manual validation
            if (result.hasErrors()) { 
                return "/form";
            }

        service.saveMyModel(m);       
        return "redirect:/formtest?id=" + id;
    }

    @ModelAttribute("command")
    public MyModel backingObject(HttpServletRequest request, 
            @RequestParam(value="id", required = false) Long id) {
        MyModel m = null;
        if (id != null)
            m = service.getMyModel(id);
        else
            m = new MyModel();
        return m;
    }
}
@控制器
公共类FormTest扩展了MyController{
.....
@自动连线
私有MyValidator MyValidator;//实现Spring的验证器接口
......
@RequestMapping(值={“/formtest”},方法=RequestMethod.GET)
公共字符串formGet(HttpServletRequest请求,
@RequestParam(value=“id”,required=false)长id,
(地图){
返回“/表格”;
}
@RequestMapping(值={“/formtest”},方法=RequestMethod.POST)
公共字符串formPost(HttpServletRequest请求,
@ModelAttribute(“命令”)MyModel m,
@RequestParam(value=“id”,required=false)长id,
地图,
绑定结果结果,
会话状态(状态){
myValidator.validate(m,result);//手动验证
if(result.hasErrors()){
返回“/表格”;
}
saveMyModel(m);
return“redirect:/formtest?id=“+id;
}
@模型属性(“命令”)
公共MyModel backingObject(HttpServletRequest,
@RequestParam(value=“id”,required=false)长id){
MyModel m=null;
如果(id!=null)
m=service.getMyModel(id);
其他的
m=新的MyModel();
返回m;
}
}

您可以这样做:

@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView saveEntity(@Valid Entity entity, BindingResult result) {
    if (result.hasErrors()) {
           // do something
    }
    // do something else
}
控制器中还需要其他方法来注册验证器:

@InitBinder("entity")
public void initBinder(WebDataBinder binder) {
    binder.setValidator(new EntityValidator());
}

您可以这样做:

@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView saveEntity(@Valid Entity entity, BindingResult result) {
    if (result.hasErrors()) {
           // do something
    }
    // do something else
}
控制器中还需要其他方法来注册验证器:

@InitBinder("entity")
public void initBinder(WebDataBinder binder) {
    binder.setValidator(new EntityValidator());
}