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


      同步发布:http://www.yuanrengu.com/index.php/springmvc-user-initbinder.html

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

     

  • 相关阅读:
    四套读取方案
    java的分层开发
    位移运算符
    反射
    多线程下的单例
    学生管理系统
    iOS-分段控制器-基本概念
    iOS-UITableView-处理cell上按钮事件(弹出警示框,页面跳转等)
    iOS-UIScrollView-图片缩放
    Xcode-Xcode 7.3 解决不能自动联想问题
  • 原文地址:https://www.cnblogs.com/heyonggang/p/6186633.html
Copyright © 2020-2023  润新知