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

Posted

技术标签:

【中文标题】Spring-MVC:需要最简单的表单处理、绑定和验证示例【英文标题】:Spring-MVC: Need the most simple example of form-processing, binding, and validation 【发布时间】:2011-05-05 22:59:28 【问题描述】:

我有一个表格:

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

我有一个 Person 对象:

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

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

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

经过大量阅读,这一步让我感到困惑。有人可以告诉我“绑定”数据、“验证”(例如验证器)和“处理”数据(例如控制器,尤其是作为参数传递给它的参数)需要什么吗?

【问题讨论】:

【参考方案1】:

Spring 有一个完整的教程,展示了您需要的各个方面。它被称为“宠物诊所”。您可以通过以下方式查看:

git https://github.com/SpringSource/spring-petclinic

【讨论】:

好的,我想我还没有掌握 2 个具体问题:1)在 oss.petclinic.web.FindOwnerForm 中,processSubmit 方法接受 Owner 对象。 Spring 做了一些事情来创建那个对象,它做了什么? 2)在osspetclinic.web.AddPetForm中processSubmit()方法接受一个ModelAttribute("pet"),我相信我理解这意味着Entry 在这个方法被调用之前被添加到模型中,但那是谁干的??【参考方案2】:

这是我一直在寻找的答案,我不明白 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 验证器将基于这些注释验证类并将任何错误发布到错误对象(BindingResult 对象是 Springs 的 Errors 的扩展,并且对于简单的例子Errors 对象是有趣的组件)。

JSR-303 验证注解的 Person 类(与 @Valid 选项一起使用):

public class Person 
   @NotNull
   @Size(min=3, max=20)
   private String firstname;

   @NotNull
   @Size(min=3, max=20)
   private String lastname;

   // ... getters & setters ...

【讨论】:

以上是关于Spring-MVC:需要最简单的表单处理、绑定和验证示例的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring MVC 处理 JSON 和表单数据请求

带有 i18n 消息的 Spring-MVC + RESTeasy 表单 bean 验证 (JSR 303)

spring-mvc 如何把页面表单提交过来的值注入到对应的实体里面

JavaScript实现简单的双向数据绑定(EmberAngularVue)

JavaScript实现简单的双向数据绑定(EmberAngularVue)

JavaScript实现简单的双向数据绑定(EmberAngularVue)