爲何要進行日期類型轉換?java
在基於HTTP協議的web應用中,客戶端請求的全部內容(如在表單中輸入的姓名,年齡,生日,等)均均可以以文本編碼方式傳輸到服務器端,但服務器端的編程語言(如java)有着豐富的數據類型,如int,boolean,Date及自定義類型等,所以,當這些參數進入應用程序時,他們必須被轉換爲合適的服務器端編程語言的數據類型。(p116)web
何時須要自定義類型轉換器?編程
在引入第三方jar包,集合中只有一個class文件,要自定義類型轉換器該類做爲user類的一個屬性並經過set方法注入參數時考慮自定義,不然無須考慮。服務器
Struts2自定義類型轉換器:jsp
客戶端發送過來的數據都是以String[]的形式保存的。在struts2裏面僅僅不多的數據類型轉換支持,例如原生的數據類型。還有常見的String或者Date類型。struts沒法知道咱們會使用哪一種數據類型。因此它提供一些實現自定義類型轉換的類。編程語言
具體的轉換過程以下:ide
1.定義一個類DataConverter編碼
該類繼承自StrutsTypeConverter,定義了兩個抽象方法,用於不一樣的轉換方向,分別以下:spa
(1) public Object convertFromString(Map context, String[] values, Class toType) 將一個或多個字符串值轉換成指定的類型。參數context是表示OGNL上下文的Map對象,參數values是要轉換的字符串值,參數toType是要轉換的目標類型3d
(2)public String convertToString(Map context, Object obj):將指定對象轉換爲字符串,參數context是表示OGNL上下文的Map對象,參數Object是要轉換的對象
public class DataConverter extends StrutsTypeConverter{ //支持轉換的多種日期格式 private final DateFormat[]dfs= { new SimpleDateFormat("yyyy/MM/dd"), }; /* * 將指定格式字符串轉換爲日期類型 */ @Override public Object convertFromString(Map context, String[] values, Class toType) { //獲取日期的字符串 String value=(String)values[0]; //遍歷日期支持格式,進行轉換 for (int i = 0; i < dfs.length; i++) { try { return dfs[i].parse(value); } catch (Exception e) { continue; } } //若是遍歷完畢後若沒有轉換成功,代表出現 轉換異常 throw new TypeConversionException(); } /* *將日期轉換爲指定格式字符串 */ @Override public String convertToString(Map context, Object obj) { //輸出的格式是yyy-MM-dd return new SimpleDateFormat("yyyy/MM/dd").format(obj); }
2.建立實體類:
3.struts.xml配置中:
4.index.jsp頁面中:
5.配置單個類型轉換:
首先在action包下建立:
配置完單個類型轉換後,頁面展現效果如圖所示:
6.配置全局類型轉換:
在src目錄建立xwork-conversion.properties
顯示效果圖:
誰不會休息,誰就不會工做。---列寧