為什么要進行日期類型轉換?
在基于HTTP協議的web應用中,客戶端請求的所有內容(如在表單中輸入的姓名,年齡,生日,等)均都可以以文本編碼方式傳輸到服務器端,但服務器端的編程語言(如java)有著豐富的數據類型,如int,boolean,Date及自定義類型等,因此,當這些參數進入應用程序時,他們必須被轉換為合適的服務器端編程語言的數據類型。(p116)
什么時候需要自定義類型轉換器?
在引入第三方jar包,集合中只有一個class文件,要自定義類型轉換器該類作為user類的一個屬性并通過set方法注入參數時考慮自定義,否則無須考慮。
Struts2自定義類型轉換器:
客戶端發送過來的數據都是以String[]的形式保存的。在struts2里面僅僅很少的數據類型轉換支持,例如原生的數據類型。還有常見的String或者Date類型。struts無法知道我們會使用哪種數據類型。所以它提供一些實現自定義類型轉換的類。
具體的轉換過程如下:
1.定義一個類DataConverter
該類繼承自StrutsTypeConverter,定義了兩個抽象方法,用于不同的轉換方向,分別如下:
(1) public Object convertFromString(Map context, String[] values, Class toType) 將一個或多個字符串值轉換成指定的類型。參數context是表示OGNL上下文的Map對象,參數values是要轉換的字符串值,參數toType是要轉換的目標類型
(2)public String convertToString(Map context, Object obj):將指定對象轉換為字符串,參數context是表示OGNL上下文的Map對象,參數Object是要轉換的對象
package bigno.qizhiF4.NetBookstore.Date;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("dd/MM/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=com.great.util.DateConverter其中的com.great.util.DateConverter是日期轉換類包含命名空間的全稱。
然后很多人就大功告成了。
而我還沒有成功,系統報錯
“ERROR (CommonsLogger.java:27) - Conversion registration error”
“java.lang.ClassNotFoundException: com.great.util.DateConverter”
注冊類型轉換器沒有成功?
仔細一檢查發現“java.util.Date=com.great.util.DateConverter”的后面多了一個空格!真相大白了。去掉空格,再次運行,成功!

新聞熱點
疑難解答