標籤:register except row simple hex 配置步驟 xsd xmlns ext
初始化參數綁定與類型轉換很類似,初始化綁定時,主要是參數類型
---單日期
在處理器類中配置Binder 方法 使用@InitBinder註解
在這裡首先註冊一個使用者編輯器 參數一為目標類型 propertyEditor為屬性編輯器,此處我們選用 CustomDateEditor屬性編輯器,
參數一為想轉換的日期格式,參數二表示是否允許為空白
package cn.controller;import java.text.DateFormat;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;/** * * @author 景佩佩 * */@Controllerpublic class MyController{ //處理器方法 @RequestMapping(value="/first.do") public String doFirst(Date birthday,int age) { System.out.println("3333"); return "/welcome.jsp"; } //自訂一個方法 @InitBinder public void initBinder(WebDataBinder binder){ DateFormat df=new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(df, true)); } }
只需在applicationContext.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.controller"></context:component-scan> </beans>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <style type="text/css"> form{ background-color:pink; width:500px; } </style> <title></title> </head> <body> ${ex.message } <form action="${pageContext.request.contextPath }/first.do" method="post"> <h1>自訂類型轉換器</h1> 出生日期:<input name="birthday" value="${birthday }"/>${birthdayerror }<br/><br/> 年齡:<input name="age" value="${age }"/>${ageerror }<br/><br/> <input type="submit" value="註冊"/> </form> </body></html>
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>歡迎頁面</title> </head> <body> <h1>歡迎訪問${uname }${param.uage }</h1> </body></html>
---多日期格式
配置步驟:
在處理器類中使用我們自定的屬性編輯器
MyController.java
package cn.controller;import java.util.Date;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;@Controllerpublic class MyController{ //處理器方法 @RequestMapping(value="/first.do") public String doFirst(Date birthday,int age) { System.out.println("3333"); return "/welcome.jsp"; } //自訂一個方法 @InitBinder public void initBinder(WebDataBinder binder){ System.out.println("=========="); binder.registerCustomEditor(Date.class, new MyDateEditor()); } }
屬性編輯器
此時我們需要考慮使用哪個屬性編輯器,需要定義自己的屬性編輯器
大致的配置方式如單日期相似,只需要更換屬性編輯即可
自訂的屬性編輯器,需要我們繼承PropertiesEditor,重寫裡面的setAsText方法,使用setValue方法賦值
MyDateEditor.java
package cn.controller;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.regex.Pattern;import org.springframework.beans.TypeMismatchException;import org.springframework.beans.propertyeditors.PropertiesEditor;/** * * @author 景佩佩 * */public class MyDateEditor extends PropertiesEditor{ /** * source:字串型的日期 */ @Override public void setAsText(String source) throws IllegalArgumentException { //一旦報錯,自動調度到異常處理器 SimpleDateFormat sdf=getDateFormat(source); try { Date date = sdf.parse(source); setValue(date); } catch (ParseException e) { e.printStackTrace(); } } private SimpleDateFormat getDateFormat(String source){ SimpleDateFormat sdf=new SimpleDateFormat(); 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; }}
SpringMvc中初始化參數綁定