Spring绑定表单数据
2016-05-19 14:16
459 查看
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" %>
简要说下几个关键的标签。
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,可用于数据绑定和验证。
例如我们现在有一个表单,表单代码如下:
我们需要提交用户和地址到后台接收,并且存在两个对象,分别是User和UserWarpper对象:
绑定表单数据到后台需要对绑定的数据新建一个属性编辑器PropertyEditorSupport,此处的对User进行数据绑定:
下一步只需要在请求的controller里注册即可:
假设前端输入的是用户的name属性,那么在请求提交表单的时候,会将表单中的user属性包装成user对象并设置到UserWarpper对象中。
此外,WebDataBinder还有一个addValidators(Validator...)方法还可以用于数据的验证,配合errors标签向前端输出错误信息。
首先建立验证器:
然后在initBinder注解的方法中添加验证器:
那么在前端中显示错误信息的代码如下:
如果要显示所有错误信息,使用“*”。
spring内置了很多基本的属性编辑器,如时间编辑器等等可供我们使用:
在jsp页面使用spring提供的标签需要引入相关的taglib:<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
简要说下几个关键的标签。
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));
相关文章推荐
- java netty简单使用
- eclipse SSE设置
- Spring DispatcherServlet 的作用
- JAVA笔记
- Java-输入输出基础(字节流)
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- Spring AOP
- Java实现按中文首字母排序的具体实例
- 《学习笔记》之JAVA设计模式--工厂方法模式
- java 线程池管理 ThreadPool用法与示例
- springmvc-spring-hibernate整合
- spring框架下搭建websocket
- java科学计数法转换成普通计数法
- java怎么调用线程池调用 ExecutorService
- JMF-Java媒体框架
- 《Spring技术内幕》学习笔记2——IoC定位Bean定义资源
- 多项式乘积(Java)
- java基础部分之环境配置(最最基础部分哦)
- eclipse导入android工程,提示“Select at least one project”错误
- java入门之接口