@InitBinder的作用

  • 由@InitBinder表示的方法,可以对WebDataBinder对象进行初始化。WebDataBinder是DataBinder的子类,用于完成由表单到JavaBean属性的绑定。
  • @InitBinder方法不能有返回值,它必须盛名为void。
  • @InitBinder方法的参数通常是WebDataBinder,@InitBinder可以对WebDataBinder进行初始化

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

@InitBinder
public void initBinder(WebDataBinder binder){
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  // 严格限制日期转换
  sdf.setLenient(false);
  //true:允许输入空值,false:不能为空值
  binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));
}

initBinder方法用在controller类中

spring mvc在绑定表单之前,都会先注册这些编辑器,Spring自己提供了大量的实现类,诸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等许多,基本上够用。
使用时候调用WebDataBinder的registerCustomEditor方法
registerCustomEditor源码:

public void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor) {
    getPropertyEditorRegistry().registerCustomEditor(requiredType, propertyEditor);
}

第一个参数requiredType是需要转化的类型。
第二个参数PropertyEditor是属性编辑器,它是个接口,以上提到的如CustomDateEditor等都是继承了实现了这个接口的PropertyEditorSupport类。

posted @ 2018-04-08 19:04  点点积累  阅读(2456)  评论(0编辑  收藏  举报