Struts2 日期類型轉換

Struts2 日期類型轉換 html

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

 

package ouc.sei.trace.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateConverter extends DefaultTypeConverter {
    private static final DateFormat[] ACCEPT_DATE_FORMATS = {
            new SimpleDateFormat("MM/dd/yyyy"),
            new SimpleDateFormat("yyyy-MM-dd"),
            new SimpleDateFormat("yyyy/MM/dd") }; //支持轉換的日期格式 

    @Override 
    public Object convertValue(Map context, Object value, Class toType) { 
        if (toType == Date.class) {  //瀏覽器向服務器提交時,進行String to Date的轉換 
            Date date = null; 
            String dateString = null; 
            String[] params = (String[])value; 
            dateString = params[0];//獲取日期的字符串 
            for (DateFormat format : ACCEPT_DATE_FORMATS) { 
                try { 

                    return format.parse(dateString);//遍歷日期支持格式,進行轉換 
                } catch(Exception e) { 
                    continue; 
                } 
            } 
            return null; 
        } 
        else if (toType == String.class) {   //服務器向瀏覽器輸出時,進行Date to String的類型轉換 
            Date date = (Date)value; 
            return new SimpleDateFormat("yyyy-MM-dd").format(date);//輸出的格式是yyyy-MM-dd 
        } 
        
        return null; 
    }
}
 

在根目錄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中填寫的字符串。 jsp

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

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

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

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

(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、程序運行流程

運行流程分兩步:

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

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

第一步: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到輸出頁面。

四、定義全局類型轉換

上面所演示的是局部類型轉換方式,假若有四個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

相關文章
相關標籤/搜索