代码之家  ›  专栏  ›  技术社区  ›  David Parks

Spring MVC:需要表单处理、绑定和验证的最简单示例

  •  7
  • David Parks  · 技术社区  · 14 年前

    <form action="/processform">
       <input name="firstname" value="john" />
       <input name="lastname" value="doe" />
    </form>
    

    我有个人反对:

    public class Person {
       private String firstname;
       private String lastname;
       // ... getters & setters ...
    }
    

    我想接收这些数据,对其执行验证,并将其发布到数据存储。

    如何编写控制器来完成此操作?我知道可以将参数作为请求参数传入,但我认为“正确的”方法是以某种方式将表单中的数据绑定到Person对象,然后在控制器中接收该Person对象并调用配置为接收Person对象的Validate对象。

    读了很多书之后,这一步让我很困惑。有人能告诉我需要什么来“绑定”数据、“验证”(例如验证器)和“处理”数据(例如控制器,特别是作为参数传递给它的内容)吗?

    2 回复  |  直到 14 年前
        1
  •  12
  •   David Parks    14 年前

    这就是我要寻找的答案,我不明白Spring默认情况下会从表单提交中获取所有参数(例如“firstname”和“lastname”),并可以通过调用这些参数的setter方法为您创建对象。

    @Controller
    public class MyFormProcessor {
       @RequestMapping("/formsubmit")
       public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
          // ...handle form...
       }
    }
    

    Spring在调用 handleForm 对于这个请求(显然比我在这个简单示例中描述的更具扩展性):

    Person person = new Person();
    person.setFirstname( request.getParameter("firstname") );
    person.setLastname( request.getParameter("lastname") );
    handleForm(person, anErrorsObject, new Model());
    

    为了进行验证,您可以创建自己的验证器(这里我不提这个),或者如果在类路径中包含Hibernate验证器,那么您可以注释 Person @Valid 如我在上面的示例中所描述的,Hibernate验证器将基于这些注释验证类,并将任何错误发布到error对象(a BindingResult 对象是弹簧的扩展 Errors ,对于简单的示例 错误 对象是有趣的组件)。

    public class Person {
       @NotNull
       @Size(min=3, max=20)
       private String firstname;
    
       @NotNull
       @Size(min=3, max=20)
       private String lastname;
    
       // ... getters & setters ...
    }
    
        2
  •  2
  •   tostao    11 年前

    Spring有一个完整的教程,展示了您需要的每一个方面。这叫“宠物诊所”。您可以从以下位置查看:

    吉特 https://github.com/SpringSource/spring-petclinic