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文件,並在裏面添加下面語句,註冊類型轉換器
代碼解說: 瀏覽器 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,分別爲Action1、Action2、Action3、Action4,每一個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