SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法

在使用SpingMVC框架的项目中,经常会遇到页面某些数据类型是Date、Integer、Double等的数据要绑定到控制器的实体,或者控制器需要接受这些数据,如果这类数据类型不做处理的话将无法绑定。

这里我们可以使用注解@InitBinder来解决这些问题,这样SpingMVC在绑定表单之前,都会先注册这些编辑器。一般会将这些方法些在BaseController中,需要进行这类转换的控制器只需继承BaseController即可。其实Spring提供了很多的实现类,如CustomDateEditor、CustomBooleanEditor、CustomNumberEditor等,基本上是够用的。

demo如下:

public class BaseController {

  @InitBinder
  protected void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Date.class, new MyDateEditor());
    binder.registerCustomEditor(Double.class, new DoubleEditor());
    binder.registerCustomEditor(Integer.class, new IntegerEditor());
  }

  private class MyDateEditor extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date = null;
      try {
        date = format.parse(text);
      } catch (ParseException e) {
        format = new SimpleDateFormat("yyyy-MM-dd");
        try {
          date = format.parse(text);
        } catch (ParseException e1) {
        }
      }
      setValue(date);
    }
  }

  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();
    }
  } 

  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();
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • 详解SpringMVC注解@initbinder解决类型转换问题
(0)

相关推荐

  • 详解SpringMVC注解@initbinder解决类型转换问题

    在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题. 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作. WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的

  • SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法

    在使用SpingMVC框架的项目中,经常会遇到页面某些数据类型是Date.Integer.Double等的数据要绑定到控制器的实体,或者控制器需要接受这些数据,如果这类数据类型不做处理的话将无法绑定. 这里我们可以使用注解@InitBinder来解决这些问题,这样SpingMVC在绑定表单之前,都会先注册这些编辑器.一般会将这些方法些在BaseController中,需要进行这类转换的控制器只需继承BaseController即可.其实Spring提供了很多的实现类,如CustomDateEdi

  • jQuery中ajax请求后台返回json数据并渲染HTML的方法

    html实例 <table border="0" class="restaurant_food" cellspacing="0" cellpadding="1"> <input type="text" name="dishes" value="" class="seek_product" placeholder="请输入

  • 在react中使用highlight.js将页面上的代码高亮的方法

    通过 highlight.js 库实现对文章正文 HTML 中的代码元素自动添加语法高亮,highlight.js官方文档 下载highlight.js npm i highlight.js 导入highlight.js import hljs from 'highlight.js' import 'highlight.js/styles/vs2015.css'   用highlight.js   useEffect(() => {     // 配置 highlight.js     hljs

  • Servlet返回的数据js解析2种方法

    这篇文章主要介绍了Servlet返回的数据js解析2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方式1:Json 接收函数:ajax.responseText后面没括号 其实在之前所说的ajax中还遗留了一些问题就是,Servlet返回给js的数据是如何被js解析的呢? 之前只是发送了一句话,所以他就以html的格式进行解析就成功了,但是在实际中我们往往发送的数据是存在一个对象当中的又或者是一组对象当中的,我们应该如何发送呢? jso

  • Android应用中利用ViewPager实现多页面滑动切换效果示例

    1.添加android support包 因为上面的几个类都是在android support包中才提供,我们先添加包. 在Eclipse->Window->Android SDK Manager,选择列表中Extras->Android Support Library进行安装.下载完后在android-sdk\extras\android\support目录下,这里我们选择v4版本,进入v4目录,拷贝其中的android-support-v4.jar文件到工程的libs目录(若没有新建

  • 利用Pandas读取表格行数据判断是否相同的方法

    描述: 下午快下班的时候公司供应链部门的同事跑过来问我能不能以程序的方法帮他解决一些excel表格每周都需要手工重复做的事情,Excel 是数据处理最常用的办公工具对于市场.运营都应该很熟练.哈哈,然而程序员是不怎么会用excel的.下面给大家介绍一下pandas,  Pandas是一个强大的分析结构化数据的工具集:它的使用基础是Numpy(提供高性能的矩阵运算):用于数据挖掘和数据分析,同时也提供数据清洗功能. 具体需求: 找出相同的数字,把与数字对应的英文字母合并在一起. 期望最终生成值:

  • 在Python中利用Pandas库处理大数据的简单介绍

    在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章<别老扯什么Hadoop了,你的数据根本不够大>指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择.这次拿到近亿条日志数据,千万级数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python来处理数据: 硬件环境         CPU:3.5 GHz Intel Core i7         内存:32 GB HDDR 3 1600 MHz         硬

  • Python中使用socket发送HTTP请求数据接收不完整问题解决方法

    由于工作的需求,需要用python做一个类似网络爬虫的采集器.虽然Python的urllib模块提供更加方便简洁操作,但是涉及到一些底层的需求,如手动设定User-Agent,Referer等,所以选择了直接用socket进行设计.当然,这样的话,需要对HTTP协议比较熟悉,HTTP协议这里就不做讲解了.整个python的代码如下: #!/usr/bin env python import socket host="www.baidu.com" se=socket.socket(soc

  • Django中利用filter与simple_tag为前端自定义函数的实现方法

    前言 Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些的函数功能并不支持,例如通过模板来判断一个返回值是否是合法的数字类型,此时如果又不希望通过后台视图代码来实现的话,我们就可以自定义一些前端函数功能. Django为我们提供了两种方式,分别是filter和simple_tag,下面对比两种方式,分别实现判断返回值的功能函数. 准备工作 1.应用

  • 在java中 利用匿名内部类进行较简洁的双括弧初始化的方法

    java的collection集合框架如set.map.list没有提供任何简便的方法供初始化.而每次建立集合都要将值一个个add进去.如 复制代码 代码如下: Set<Character> letter=new HashSet<Character>();letter.add('a');letter.add('b');//... 非常繁琐. 但用匿名内部类的话.可以略为简便些. 复制代码 代码如下: Set<Character> letter=new HashSet&l

随机推荐