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,可用于数据绑定和验证。

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

  

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

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

  

 public class User {

     private String userName;
private int age;
// getter setter...
}
 public class UserWarpper {

     private User user;
private String address;
//getter setter...
}

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

  

 public class UserPropertyEditor extends PropertyEditorSupport{

     @Override
public void setAsText(String text) throws IllegalArgumentException {
if(text!=null){
User user = new User();
user.setName(text);
setValue(user);
} }
}

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

  

 @Controller
@RequestMapping("/form")
public class MyFormController { @InitBinder
public void init(WebDataBinder binder){
binder.registerCustomEditor(User.class, new UserPropertyEditor());
} @RequestMapping("/submit")
public void submit(UserWarpper userWarpper){ }
}

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

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

  首先建立验证器:

  

 public class MyValidator implements Validator{

     @Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
} @Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "name", "名称不能为空!");
} }

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

  

binder.addValidators(new MyValidator());

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

  

 <form:errors path="name"/>

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

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

  

   binder.registerCustomEditor(Boolean.class, new CustomBooleanEditor(true));
binder.registerCustomEditor(Number.class, new CustomNumberEditor(Number.class, true));
binder.registerCustomEditor(ArrayList.class, new CustomCollectionEditor(ArrayList.class, true));
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-DD"), true));

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

  1. 使用Spring MVC表单标(转)

    概述     在低版本的Spring中,你必须通过JSTL或<spring:bind>将表单对象绑定到HTML表单页面中,对于习惯了Struts表单标签的开发者来说,Spring MVC的 ...

  2. Spring进行表单验证

    转自:https://www.tianmaying.com/tutorial/spring-form-validation 开发环境 IDE+Java环境(JDK 1.7或以上版本) Maven 3. ...

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

    绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...

  4. Spring MVC - 表单处理示例

    环境搭建 环境: Intellij IDEA Spring MVC 完整的项目文件结构如下所示: Student.java package com.ktao.controller; public cl ...

  5. vue指令:v-model绑定表单控件;v-model与v-bind结合使用

    一.v-model绑定表单控件 v-model 双向数据绑定:一般用于表单元素,会忽略表单元素的value.checked.selected的初始值,且将Vue实例的数据作为数据来源. 1. 单行文本 ...

  6. Spring MVC表单标签

    从Spring 2.0开始,Spring MVC开始全面支持表单标签,通过Spring MVC表单标签,我们可以很容易地将控制器相关的表单对象绑定到HTML表单元素中. form标签     和使用任 ...

  7. Spring MVC表单提交

    实际应用中,列表中的单条记录的修改,可能需要传很多对象参数到后台服务器,Spring MVC表单标签<form:> 提供了一种简洁的提交方式. <form id="form ...

  8. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第四篇:传递表单数据

    摘要      本文将完成我们“MVC公告发布系统”的公告发布功能,以此展示在ASP.NET MVC中如何传递处理表单的数据. 前言      通过前几篇文章,我们已经能比较自如的使用ASP.NET ...

  9. Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据

    用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...

随机推荐

  1. Xcode Pod使用

    安装pod  略.. 打开终端 cd  项目路径  (可以在xocde里项目右键show in Finder  讲工程目录拖入终端) 回车 vim podfile 回车 输入 :wq 保存 建立pod ...

  2. 【干货】解密监控宝Docker监控实现原理

    分享人高驰涛(Neeke),云智慧高级架构师,PHP 开发组成员,同时也是 PECL/SeasLog 的作者.8 年研发管理经验,早期从事大规模企业信息化研发架构,09 年涉足互联网数字营销领域并深入 ...

  3. Camstar Portal modeling user guid --自定义用户菜单

    通过studio 创建 menu definition 创建菜单 创建成功后到employee界面设置对应菜单就可以了

  4. JDBC获取sql server存储过程查询结果集(没有出参)

    对于一些较为复杂的统计条件查询,可以通过存储过程来实现,既可以提高效率,减少网络流量,也可以避免sql语句耦合在代码中.但是存储过程返回的结果集如何获取(类似表数据),却着实让我费劲心力. 如下: C ...

  5. 关于dp dip dpi px

    在Android开发中,屏幕适配是一件非常让人头疼的事情.有时候在这个机型上调试的漂漂亮亮的UI界面,换一部手机就丑的不忍直视.但为了我们软件更好的用户体验,我们必须适应Android市场上形形色色的 ...

  6. System.StackOverflowException的一个例子(转)

    今天按着书上的例子写呀写,写了一下午终于做出了一个三层模式的通讯录(当然很简单),但是,弄了最后却碰到个运行时的 异常,弄得我这个asp.net菜鸟郁闷了再郁闷.异常如下:发生类型为 System.S ...

  7. SVN服务器与测试服务器代码同步

    在本地做测试项目的时候,想svn提交和服务器上的代码一步到位,不想再手动更新一次了,所以就研究了下同步, 要实现svn提交后自动更新到测试服务器,在你的版本库下的hooks文件夹下添加post-com ...

  8. JavaWeb技术(一):JDBC简介

    一.  JDBC简介 1. Java Database Connectivity(JDBC) 使用JDBC可以对数据库进行访问 2. JDBC的核心接口 1)DriverManager 驱动管理器接口 ...

  9. HTML5实现摇一摇

    一.原理: 利用devicemotion获取移动速度,得到device移动时相对之前某个时间的差值比 二.效果图: 三.源码: //先判断设备是否支持HTML5摇一摇功能 if (window.Dev ...

  10. ng-repeat && ng-options的故事

    ng-repeat && ng-options的故事   1. <select class="input-small" ng-model="newH ...