Spring MVC 之類型轉換(五)
來自: http://www.cnblogs.com/hellokitty1/p/5167125.html
雖然SpringMVC可以自動綁定多種數據類型,但是有時候有些特殊的數據類型還是會在綁定時發生錯誤,需要我們自己書寫類型轉換完成綁定。
SpringMVC中提供兩種綁定方式: 以時間轉換為例 。
1、屬性編輯器(傳統方式)
控制器:
1 @RequestMapping(value="/login.do") 2 public String login(UserBean user){ 3 log.info(user.getUsername()); 4 log.info(user.getBirthday()); 5 return "index"; 6 } 7 // 自定義一個屬性編輯器,用于轉換時間類型 8 @InitBinder 9 public void converterStringDate(WebDataBinder binder){ 10 binder.registerCustomEditor(Date.class, new DateEditor()); 11 }
可以通過重寫PropertyEditorSupport中的setAsText()定義自己的轉換規則
1 package com.cy.springannotation.controller; 2 3 import java.beans.PropertyEditorSupport; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 8 public class DateEditor extends PropertyEditorSupport { 9 10 @Override 11 public void setAsText(String text) throws IllegalArgumentException { 12 Date date = null; 13 try { 14 if(text.contains("-")){ 15 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); 16 date = sf.parse(text); 17 }else { 18 SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy"); 19 date = sf.parse(text); 20 } 21 } catch (ParseException e) { 22 e.printStackTrace(); 23 } 24 this.setValue(date); 25 } 26 27 }
2、類型轉換器
Converter是Spring3提供的新的類型轉換,相對于屬性轉換器更強大,可以把任意類型轉換,而不是局限于String類型。
控制器:
1 @RequestMapping(value="/login.do") 2 public String login(UserBean user){ 3 log.info(user.getUsername()); 4 log.info(user.getBirthday()); 5 return "index"; 6 } 7
全局類型轉換器
1 package com.cy.springannotation.controller; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 import org.springframework.core.convert.converter.Converter; 8 /** 9 * 全局類型轉換器 10 * @author acer 11 * 12 */ 13 public class DateConvert implements Converter<String, Date>{ 14 @Override 15 public Date convert(String text) { 16 Date date = null; 17 try { 18 if(text.contains("-")){ 19 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); 20 date = sf.parse(text); 21 }else { 22 SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy"); 23 date = sf.parse(text); 24 } 25 26 } catch (ParseException e) { 27 e.printStackTrace(); 28 } 29 return date; 30 } 31 32 }
類型轉換器需要在配置文件中配置:
1 <!--開啟注解 --> 2 <mvc:annotation-driven conversion-service="tc" /> 3 4 <!--類型轉換器工廠 --> 5 6 <bean id="tc" class="org.springframework.context.support.ConversionServiceFactoryBean"> 7 <property name="converters"> 8 <list> 9 <bean class="com.cy.springannotation.controller.DateConvert" /> 10 </list> 11 </property> 12 </bean>
共同的jsp頁面:
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 <title>登錄頁面</title> 12 <script type="text/javascript" src="<%=basePath%>js/jquery-2.1.4.js"></script> 13 <script type="text/javascript"> 14 15 16 </script> 17 </head> 18 <body> 19 <form action="login.do" method="post"> 20 <table> 21 <tr> 22 <td>用戶名:</td> 23 <td><input type="text" name="username"/></td> 24 </tr> 25 <tr> 26 <td>出生日期</td> 27 <td><input type="text" name="birthday"/></td> 28 </tr> 29 <tr> 30 <td colspan="2"> <input type="submit" value="提交"/> </td> 31 </tr> 32 </table> 33 </form> 34 </body> 35 </html>
結果顯示:
本文由用戶 bc03694 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!