zoukankan      html  css  js  c++  java
  • Spring mvc @initBinder 类型转化器的使用

    一.单日期格式

    因为是用注解完完成的后台访问,所以必须在大配置中配置包扫描器;

    1.applicactionContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:tx="http://www.springframework.org/schema/tx" 
        xmlns:mvc="http://www.springframework.org/schema/mvc" 
         xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            ">
         
       <!-- 配置包扫描器-->
           <context:component-scan base-package="cn.happy.controller"></context:component-scan>
    </beans>
    

     2.配置类

    package cn.happy.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
         @Controller
        public class FirstController {
             /**
              * @param binder
              */
             
            @InitBinder
            public void initBinder(WebDataBinder binder){
                //PropertyEditor
                //类  implements  PropertyEditor
                binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
            }
            @RequestMapping("/first.do")
            //类型转化工作一定是在真正的handler方法执行前执行的。
            public String doFirst(Date birthday,int age) throws Exception{
                System.out.println(birthday+"===============");
                System.out.println(age+"===============");
                return "/WELCOME.jsp";
            }
            
            
        }
    
        

     3.前台

        <form action="${pageContext.request.contextPath }/first.do" method="post">
                     出生日期:<input name="birthday"/><br/><br/>
                     年龄:<input name="age"/><br/><br/>
           <input type="submit" value="注册"/>
        </form>
    

    二:多日期格式

    1.因为并不是一种格式,所以我们可以把能进转换的格式提到一个类中

    package cn.happy.controller;
    
    import java.sql.Date;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.regex.Pattern;
    
    import org.springframework.beans.TypeMismatchException;
    import org.springframework.beans.propertyeditors.PropertiesEditor;
    
    public class MyDateEditor extends PropertiesEditor{
         @Override
        public void setAsText(String source) throws IllegalArgumentException {
        	 
          SimpleDateFormat sdf=getDate(source);
          //做一个操作
          try {
    		setValue(sdf.parseObject(source));
    	} catch (ParseException e) {
    		e.printStackTrace();
    	}
        	 
        }
    
    	private SimpleDateFormat getDate(String source) {
    		SimpleDateFormat sdf=null;
    		if (Pattern.matches("^\d{4}-\d{2}-\d{2}$", source)) {
    			sdf=new SimpleDateFormat("yyyy-MM-dd");
    		}else if (Pattern.matches("^\d{4}/\d{2}/\d{2}$", source)) {
    			sdf=new SimpleDateFormat("yyyy/MM/dd");
    		}else if (Pattern.matches("^\d{4}\d{2}\d{2}$", source)) {
    			sdf=new SimpleDateFormat("yyyyMMdd");
    		}else {
    			throw new TypeMismatchException("", Date.class);
    		}
    		
    		return sdf;
    	}
         
         
         
         
    }
    

    2、还是用@initBinder 注解处理类型

    package cn.happy.controller;
    
    import java.beans.PropertyEditor;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.beans.propertyeditors.PropertiesEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
         @Controller
    	public class FirstController {
        	 /**
        	  * 
        	  * @param binder
        	  */
        	 @InitBinder
        	public void initBinder(WebDataBinder binder){
        		binder.registerCustomEditor(Date.class,new MyDateEditor());
        		System.out.println("===============11111");
        		
        	}
        	 
    		@RequestMapping("/first.do")
    		//类型转化工作一定是在真正的handler方法执行前执行的。
    		public String doFirst(Date birthday,int age) throws Exception{
    			System.out.println(birthday+"===============");
    			System.out.println(age+"===============");
    			return "/WELCOME.jsp";
    		}
    		
    		
    	}
    
    	
    
  • 相关阅读:
    log4j配置详解
    elasticsearch6.0版本安装head插件
    JAVA笔记-如何将百万级数据高效的导出到Excel表单
    抽象方法为什么不能被private与static修饰
    vue利用promise实现连续弹框
    vue代码片段
    h5元素高度超出屏幕但不滚动
    css3动画
    vue 引入静态图片404
    ios windows.open()不能打开
  • 原文地址:https://www.cnblogs.com/myhome-1/p/6260018.html
Copyright © 2011-2022 走看看