Spring绑定表单数据

  Spring提供了一些jsp页面常用的form标签,很大程度上提高了我们开发的速度,不用再一个个的标签去绑定属性,而且后台接收数据也很简单,可以直接接收object对象作为属性。官方form标签介绍的网址为http://docs.spring.io/spring/docs/4.2.6.RELEASE/spring-framework-reference/htmlsingle/#spring-form-tld。包含以下的标签:

  

  在jsp页面使用spring提供的标签需要引入相关的taglib:<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

  简要说下几个关键的标签。

  1. form标签:

    form标签包含了几个特有的属性:

  •  method:请求方式,可以在controller上设置对于的请求方式。默认是"_method"。
  •  commandName:  等同与modelAttribute,设置暴露的对象名称。该对象是model中存放的对象。默认名是"command"。
  •  methodParam:设置隐藏域的名称。默认是"_method"。
  •  modelAttribute:等同于commandName。

 2.  option和options标签

  option标签是配合form:select标签使用的,用于下拉列表。如果option数据从后台传过来的集合,可以使用options标签,它有一个items属性,可用集合、map和数组数据。itemLabel标签显示标签名称。itemValue  显示值。相同的还有checkboxes和radiobuttons标签。

 3. error标签

  error标签用于向页面输出后台传递的错误信息。需要配合Volidator使用。

如何从前端绑定数据到后台呢,springmvc提供了一个@initBinder注解,可用于我们绑定表单数据到后台方法。被注解的方法有一个参数WebDataBinder,可用于数据绑定和验证。

例如我们现在有一个表单,表单代码如下:

  

1  <form:form>
2         用户:<input name="user" type="text"/>
3         地址:<input name="address" type="text"/>
4         <input type="submit" value="提交"/>
5  </form:form>

我们需要提交用户和地址到后台接收,并且存在两个对象,分别是User和UserWarpper对象:

  

1 public class User {
2
3     private String userName;
4     private int age;
5     // getter setter...
6 }
1 public class UserWarpper {
2
3     private User user;
4     private String address;
5     //getter setter...
6 }

绑定表单数据到后台需要对绑定的数据新建一个属性编辑器PropertyEditorSupport,此处的对User进行数据绑定:

  

 1 public class UserPropertyEditor extends PropertyEditorSupport{
 2
 3     @Override
 4     public void setAsText(String text) throws IllegalArgumentException {
 5             if(text!=null){
 6                 User user = new User();
 7                 user.setName(text);
 8                 setValue(user);
 9             }
10
11     }
12 }

下一步只需要在请求的controller里注册即可:

  

 1 @Controller
 2 @RequestMapping("/form")
 3 public class MyFormController {
 4
 5     @InitBinder
 6     public void init(WebDataBinder binder){
 7         binder.registerCustomEditor(User.class, new UserPropertyEditor());
 8     }
 9
10     @RequestMapping("/submit")
11     public void submit(UserWarpper userWarpper){
12
13     }
14 }

  假设前端输入的是用户的name属性,那么在请求提交表单的时候,会将表单中的user属性包装成user对象并设置到UserWarpper对象中。

  此外,WebDataBinder还有一个addValidators(Validator...)方法还可以用于数据的验证,配合errors标签向前端输出错误信息。

  首先建立验证器:

  

 1 public class MyValidator implements Validator{
 2
 3     @Override
 4     public boolean supports(Class<?> clazz) {
 5         return User.class.equals(clazz);
 6     }
 7
 8     @Override
 9     public void validate(Object target, Errors errors) {
10         ValidationUtils.rejectIfEmpty(errors, "name", "名称不能为空!");
11     }
12
13 }

然后在initBinder注解的方法中添加验证器:

  

binder.addValidators(new MyValidator());

那么在前端中显示错误信息的代码如下:  

  

1 <form:errors path="name"/>

如果要显示所有错误信息,使用“*”。

spring内置了很多基本的属性编辑器,如时间编辑器等等可供我们使用:

  

1   binder.registerCustomEditor(Boolean.class, new CustomBooleanEditor(true));
2    binder.registerCustomEditor(Number.class, new CustomNumberEditor(Number.class, true));
3    binder.registerCustomEditor(ArrayList.class, new CustomCollectionEditor(ArrayList.class, true));
4    binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-DD"), true));
时间: 2024-10-14 19:20:34

Spring绑定表单数据的相关文章

spring mvc表单修改提交

实际应用中,列表中的单条记录的修改,可能需要传很多对象参数到后台服务器,Spring MVC表单标签<form:> 提供了一种简洁的提交方式. 1 <form id="form1" class="form-horizontal chukong_form" method="post" 2 action="${ctx}/channel/sdkversion/postedit.do"> 3 <form:

Spring MVC 表单验证

1. 基于 JSR-303(一个数据验证的规范): import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.NotBlank; public class User { private String username; private String password; private int age

Spring MVC表单提交

实际应用中,列表中的单条记录的修改,可能需要传很多对象参数到后台服务器,Spring MVC表单标签<form:> 提供了一种简洁的提交方式. 1 <form id="form1" class="form-horizontal chukong_form" method="post" action="${ctx}/channel/sdkversion/postedit.do"> 3 <form:hi

DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中

绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格,使其反映从网格中的所有数据 "index.html" file contactForm = layout.cells("b").attachForm(); contactForm.loadStruct("data/form.xml"); contac

Spring MVC - 表单处理示例

环境搭建 环境: Intellij IDEA Spring MVC 完整的项目文件结构如下所示: Student.java package com.ktao.controller; public class Student { private Integer age; private String name; private Integer id; public void setAge(Integer age) { this.age = age; } public Integer getAge(

使用jQuery实现跨域提交表单数据

我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据. 在jQuery中,我们使用json数据类型,通过getJSON方法来实现从服务端获取或发送数据,而当要向不同远程服务器端提交或者获取数据时,要采用jsonp数据类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务器端应当在JSON数据前加上回调函数名,以便

Struct2提交表单数据到Acion

Struct2提交表单数据到Action,Action取表单的数据,传递变量.对象 HTML.jsp <form action="reg.do" method="post"> <input> LoginAction get post 1.action里通过属性获取get.set方法获取. 2.模型驱动 3.model对象 action中要有和表单域对应的属性名,并且要有相应的符合javabean规范的set和get方法 http://blog

jQuery 序列化表单数据 serialize() serializeArray()

1.serialize()方法 格式:var data = $("form").serialize(); 功能:将表单内容序列化成一个字符串. 这样在ajax提交表单数据时,就不用一一列举出每一个参数.只需将data参数设置为 $("form").serialize() 即可. 2.serializeArray()方法 格式:var jsonData = $("form").serializeArray(); 功能:将页面表单序列化成一个JSON

如何发送HTML表单数据

多数时候,HTML表单的目的只是为了把数据发给服务器,之后服务器再处理这些数据并发送响应给用户.虽然看起来挺简单的,但我们还是得注意一些事情以确保传送的数据不会破坏服务器.或者给你的用户制造麻烦. 数据会到哪里去 关于客户端/服务器架构 整个web都是基于一种基本的客户端/服务器架构,该架构可以归纳如下: 一个客户端(通常是Web浏览器)使用HTTP协议发送一个请求给服务器(通常是web服务器程序,譬如Apache, Nginx, IIS, Tomcat等等),而服务器则以相同的协议响应这个请求