spring mvc使用@InitBinder 标签对表单数据绑定

在SpringMVC中,bean中定义了Date,double等类型,如果没有做任何处理的话,日期以及double都无法绑定。

解决的办法就是使用spring mvc提供的@InitBinder标签

在我的项目中是在BaseController中增加方法initBinder,并使用注解@InitBinder标注,那么spring mvc在绑定表单之前,都会先注册这些编辑器,当然你如果不嫌麻烦,你也可以单独的写在你的每一个controller中。剩下的控制器都继承该类。spring自己提供了大量的实现类,诸如CustomDateEditor
,CustomBooleanEditor,CustomNumberEditor等许多,基本上够用。

当然,我们也可以不使用他自己自带这些编辑器类,那下面我们自己去构造几个

[java] view plain copy

    import org.springframework.beans.propertyeditors.PropertiesEditor;  

    public class DoubleEditor extends PropertiesEditor {
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            if (text == null || text.equals("")) {
                text = "0";
            }
            setValue(Double.parseDouble(text));
        }    

        @Override
        public String getAsText() {
            return getValue().toString();
        }
    }   
    import org.springframework.beans.propertyeditors.PropertiesEditor;  

    public class IntegerEditor extends PropertiesEditor {
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            if (text == null || text.equals("")) {
                text = "0";
            }
            setValue(Integer.parseInt(text));
        }    

        @Override
        public String getAsText() {
            return getValue().toString();
        }
    }   
    import org.springframework.beans.propertyeditors.PropertiesEditor;  

    public class FloatEditor extends PropertiesEditor {
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            if (text == null || text.equals("")) {
                text = "0";
            }
            setValue(Float.parseFloat(text));
        }    

        @Override
        public String getAsText() {
            return getValue().toString();
        }
    }    
    import org.springframework.beans.propertyeditors.PropertiesEditor;  

    public class LongEditor extends PropertiesEditor {
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            if (text == null || text.equals("")) {
                text = "0";
            }
            setValue(Long.parseLong(text));
        }    

        @Override
        public String getAsText() {
            return getValue().toString();
        }
    }    

在BaseController中

 1     @InitBinder
 2        protected void initBinder(WebDataBinder binder) {
 3            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
 4     /        binder.registerCustomEditor(int.class, new CustomNumberEditor(int.class, true));
 5            binder.registerCustomEditor(int.class, new IntegerEditor());
 6     /        binder.registerCustomEditor(long.class, new CustomNumberEditor(long.class, true));
 7            binder.registerCustomEditor(long.class, new LongEditor());
 8            binder.registerCustomEditor(double.class, new DoubleEditor());
 9            binder.registerCustomEditor(float.class, new FloatEditor());
10        }   

[java] view plain copy

  1. public class org.springframework.beans.propertyeditors.PropertiesEditor extends java.beans.PropertyEditorSupport {

如果你的编辑器类直接继承PropertyEditorSupport也可以。

时间: 2024-10-14 13:42:42

spring mvc使用@InitBinder 标签对表单数据绑定的相关文章

spring mvc 的Controller类是单例?

使用Spring MVC有一段时间了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 说是因为线程安全问题,对于Spring MVC中bean默认都是(singleton)单例的,那么用@Controller注解标签注入的Controller类是单例实现的? 测试结果发现spring3中的controller默认是单例的,若是某个controller中有一个私有的变量i,所有请求到同一个controller时,使用的i变量是共用的,即若是某个请求中修

spring mvc 如何从前台表单传递集合参数并绑定集合对象

前端传递集合: <tr>    <td>    <select name="indtablelist[0].commodity_id">        <c:forEach items="${commoditys}" var="comm">        <option value="${comm.id}">${comm.commodity_no}||${comm.c

Spring MVC 对@InitBinder数据绑定的使用

Javabean PlatformUser.java @Entity @Table(name = "dsm_USER") public class PlatformUser extends DsmObject { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column private Integer userid; @Column private String username; @Column private Strin

spring mvc中的标签

要引入 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 标签库 标签里的path属性视为了接受后台传过来的对象.当对象的属性名与path名相同时就会绑定到变现上(如input 就会自动加一个value属性 等于其属性值),相当于 el表达式传. 表单里又一个属性名为modelAttribute,可以设置它的值来指定后台传来的哪个对象 绑定到标签去. 当需要

spring mvc 常用注解标签详解

1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestP

Struts2 和 spring mvc的 迭代标签常用属性对比

<s:iterator value="#users" var="u" status="st"> <c:forEach  items="${users}"  var="u" varStatus="st">

基于Spring MVC实现基于form表单上传Excel文件,批量导入数据

在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> <!--处理2007 excel--> <dependency> <group

Java单体应用 - 常用框架 - 07.Spring MVC - 表单标签库

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-form-tags.html更多教程:光束云 - 免费课程 表单标签库 序号 文内章节 视频 1 声明表单标签 - 2 表单标签 - 3 文本框 - 4 密码框 - 5 文本域 - 6 复选框 - 7 复选框(多选) - 8 单选按钮 - 9 单选按钮(多选) - 10 下拉列表 - 11 下拉列表(多选) - 12 隐藏域 - 请参照如上章节导航进行阅读

[Spring MVC] - InitBinder验证

Spring MVC使用InitBinder验证: 使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用.大部份简单的表单验证,使用annotation验证即可以解决. Annotation验证使用方法可参见:http://www.cnblogs.com/HD/p/4123146.html 这里需要注意的一点:InitBinder和Annotation两种验证只能二选一,如果使用了InitBinder,就不能使用A