SpringMVC中@InitBinder注解介绍与使用

@InitBinder注解的方法可以对WebDataBinder初始化。webDataBinder是用于表单到方法的数据绑定的!

@InitBinder只在@Controller中注解方法来为这个控制器注册一个绑定器初始化方法,方法只对本控制器有效
一般用做BaseController对数据进行设置

  • WebDataBinder中有很多方法可以对数据绑定进行具体的设置:比如我们设置name属性为非绑定属性(也可以设置绑定值setAllowedFields):
@InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.setDisallowedFields("name");

该字段在表单提交时就不会提交上去。

对页面数据进行解析绑定

在使用SpingMVC框架的项目中,经常会遇到页面某些数据类型是Date、Integer、Double等的数据要绑定到控制器的实体,或者控制器需要接受这些数据,如果这类数据类型不做处理的话将无法绑定。
以时间为例先看没有加@Initbinder的效果
Controller层

@Controller
public class MyController {
    @RequestMapping("baseTest")
    @ResponseBody
    public String baseTest(Date date){
        System.out.println("------"+date);
        return String.valueOf(date);
    }
}

页面结果:由于语法格式有误,服务器无法理解此请求
SpringMVC中@InitBinder注解介绍与使用_第1张图片

以时间为例有两种实现方法

@Controller
public class MyController extends BaseController {
    @RequestMapping("baseTest")
    @ResponseBody
    public String baseTest(Date date){
        System.out.println("------"+date);
        return String.valueOf(date);
    }
}

1、使用Spring提供的实现类CustomDateEditor

public class BaseController {

    @InitBinder
    protected void initBinder(WebDataBinder binder){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat, true));
    }

2、自定义实现类MyDateEditor

public class BaseController {

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

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

运行结果
SpringMVC中@InitBinder注解介绍与使用_第2张图片
还有CustomBooleanEditor、CustomNumberEditor就没有一一列举了。

你可能感兴趣的:(ssm框架)