InitBinder

Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int,String等)。如果传递过来的是特殊对象,则需要手动进行封装。

Spring提供了@initBinder(初始化绑定封装)注解和WebDataBinder工具。用户只需要向WebDataBinder注册自己需要的类型的属性编辑器即可具体的做法是,在Controller中声明一个InitBinder方法,方法中利用WebDataBinder将自己实现的或者spring自带的PropertyEditor进行注册。

如可以使用InitBinder来处理Date类型的参数

@Controller    
public class MyFormController {     

    @InitBinder    
    public void initBinder(WebDataBinder binder) {     

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");     

        dateFormat.setLenient(false);     

        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));     

    }     
    // ...     

}    

WebDataBinder是用来绑定请求参数到指定的属性编辑器,可以继承WebBindingInitializer来实现一个全部controller共享的dataBiner    

@Component    
public class CommonBindingInitializer implements WebBindingInitializer {     

    public void initBinder(WebDataBinder binder, WebRequest request) {     

            SimpleDateFormat dateFormat = new SimpleDateFormat(ERPUtil.ISO_DATE_MASK);     
    
            dateFormat.setLenient(false);     

            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));     

            binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));     

    }     

}  

注意:controller中定义的initbinder只能在该controller 中使用。因此可以将initbinder定义在baseController中,这样其他继承了baseControllercontroller都能使用这个initbinder

你可能感兴趣的:(Spring,MVC)