尝试使用Spring了解基本表单验证的工作流程

时间:2010-11-05 07:30:55

标签: java spring-mvc validation

Spring的新手,在阅读参考文档后,验证简单网页表单的工作流程并没有突然出现在我身上。

有人可以给我一个初学者概述我们如何在Spring 3.0.3中进行表单验证(我在webapp中混合使用注释和xml配置,我现在正在迁移)。从Controller开始,会发生什么?

例如:到目前为止,我认为我理解我应该将表单数据“绑定”到我的创建对象(例如MyPerson),然后创建一个接受MyPerson并使用ValidationUtils执行验证的Validation对象。

但是这一切都非常模糊(特别是“绑定”概念),并且从以前经历过这个过程的人那里逐步审查工作流程会帮助我确信我没有丢失或误解任何步骤。

1 个答案:

答案 0 :(得分:2)

您提及的验证表单的方法是您可以使用的几个选项之一。

除了您建议的方法之外,您可能还希望使用具有适当实现的JSR-303注释进行调查(例如Hibernate Validator)。有很多如何实现这一目标的例子。

对于弹簧验证方法,您的基本步骤是:

  • 创建一个类作为绑定对象,将其实例传递给控制器​​中的视图
  • 使用表单taglib
  • 将对象绑定到视图中的字段
  • 在处理表单提交的控制器方法中,使用@ModelAttribute注释将表单数据绑定到绑定对象
  • 使用您的自定义验证程序对象(可能@Autowired到您的控制器)来执行验证

这是一个简单的示例控制器:

@Controller
public class PersonController {

@Autowired
private PersonValidator personValidator;

@RequestMapping(value="person/form", method = RequestMethod.GET)
public ModelAndView form() {
    // Instance of binding object
    Person person = new Person();

    // Create ModelAndView which displays personForm view
    ModelAndView mav = new ModelAndView("person/form");
    // Put our binding object in the model
    mav.getModel().put("person", person);

    return mav;
}

@RequestMapping(value="person/form", method = RequestMethod.POST)
public String save(@ModelAttribute Person person, BindingResult errors, Model model) {
    // Call our custom validator and put errors into BindingResult
    personValidator.validate(person, errors);

    // If we have validation errors
    if (errors.hasErrors()) {
        // Show form with errors
        return "person/form";
    }

    // Otherwise show some success page
    return "person/success";
 }

}