Struts2 日期類型轉換

Struts2 日期類型轉換

在Struts2中,一般的內置類型都會由系統自動進行轉換.但是Date類型好像有時候行,有時候不行。因此要想保證系統正確的對Date類型進行轉換,就要寫一個全局的類型轉換類,進行Date與String之間的類型轉換。

 

01 package ouc.sei.trace.util;
02  
03 import java.text.DateFormat;
04 import java.text.SimpleDateFormat;
05 import java.util.Date;
06 import java.util.Map;
07 import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
08  
09 public class DateConverter extends DefaultTypeConverter {
10     private static final DateFormat[] ACCEPT_DATE_FORMATS = {
11             new SimpleDateFormat("MM/dd/yyyy"),
12             new SimpleDateFormat("yyyy-MM-dd"),
13             new SimpleDateFormat("yyyy/MM/dd") }; //支持轉換的日期格式
14  
15     @Override
16     public Object convertValue(Map context, Object value, Class toType) {
17         if (toType == Date.class) {  //瀏覽器向服務器提交時,進行String to Date的轉換
18             Date date = null;
19             String dateString = null;
20             String[] params = (String[])value;
21             dateString = params[0];//獲取日期的字符串
22             for (DateFormat format : ACCEPT_DATE_FORMATS) {
23                 try {
24  
25                     return format.parse(dateString);//遍歷日期支持格式,進行轉換
26                 catch(Exception e) {
27                     continue;
28                 }
29             }
30             return null;
31         }
32         else if (toType == String.class) {   //服務器向瀏覽器輸出時,進行Date to String的類型轉換
33             Date date = (Date)value;
34             return new SimpleDateFormat("yyyy-MM-dd").format(date);//輸出的格式是yyyy-MM-dd
35         }
36          
37         return null;
38     }
39 }
 

在根目錄src下創建xwork-conversion.properties文件,並在裏面添加下面語句,註冊類型轉換器
java.util.Date= ouc.sei.trace.util.DateConverter
其中的ouc.sei.trace.util.DateConverter是日期轉換類包含命名空間的全稱。

 

代碼解說:

1、引入參數中的toType表示的是目標類型(是字符串類型還是Date類型):

當客戶端string提交到DateConvert這個類時候(即:toType==Date.class),value指的是textfield中填寫的字符串。

  對if(Date.class==toType)過程解釋:

  (1)String[] params = (String[])value;---------------value顯示轉化爲字符數組後賦值爲數組str[]

  (2)dateString = params[0];//獲取日期的字符串 -------取出str[]的第一個元素

2、配置屬性文件使得讓date屬性由DateConvert處理:

(1)在和要被convert的類的同目錄下新建一個文件:

Action-conversion.properites

  Action --------要轉換的屬性所在的類的類名

   -conversion.properies-----固定格式

(2)填寫屬性文件內容:

  date=ouc.sei.trace.util.DateConvert

  date--------具體要轉換哪一個屬性

   ouc.sei.trace.util.DateConvert-----具體用那個convert類來轉換date

 注意:如果對多個屬性進行轉換可以添加多個如date=ouc.sei.trace.util.DateConvert形式的內容。

3、程序運行流程

運行流程分兩步:

一、字符串字段被轉化爲對應數據類型字段上傳到action中;

二、對應字段被轉化爲字符串類型字段顯示在輸出頁面;

第一步:input.jsp提交表單---->進入表單提交的action,在此action裏接受表單穿過來的各個字段,是基本數據類型字段struts2會自動進行對其轉換,如果遇到對象類型字段則進入此action所在的目錄查找轉換配置文件(Action-convertion.properties),在轉換配置文件中查找處理此對象數據類型的類(DateConverter.java---->對象類型轉化類將form提交過來的與對象類型相關的字符串轉化爲對象實例->轉化後的對象實例被設置(set)到action中;

第二步:action中的衆多字段裏,如果是基本數據類型字段的struts2會自動轉換爲字符串類型字段發送到輸出頁面(out.jsp), 如果是對象類型字段則會進入action中找轉換配置文件(Action-convertion.properties),在轉換配置文件中查找處理此對象數據類型的類(DateConverter.java---->對象類型抓換類將action中的對象類型字段轉換爲相應字符串字段---->轉換後的字符串實例被get到輸出頁面。

4、定義全局類型轉換

上面所演示的是局部類型轉換方式,假如有四個action,分別爲Action1Action2Action3Action4,每個Action裏面都有一個相同的date屬性需要轉換,所以必須在net.javaw.action包下面創建四個屬性文件指定每個Action都需要DateConverter類進行轉換,即:

Action1-coversion.properties,ction2-coversion.properties, Action3-coversion.properties,Action4-coversion.properties

如果更多類需要轉換,顯然這種方式比較累人,這種情況可以考慮使用全局類型轉換。

配置步驟:

  (1)src目錄下創建全局屬性文件,文件名爲:

     xwork-conversion.properties 文件名是固定不變的。

(2)全局屬性文件內容:

     net.javaw.bean.Date=ouc.sei.trace.util.DateConverter

  等號左邊是要轉換的類所在的包名,右邊是具體用那個convert類來轉換date

 

 

轉載必須註明出處,來源: http://www.cnblogs.com/javaw/archive/2012/08/23/2652023.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章