自定義類型轉換器
在處理某些類型時,我們需要自定義類型轉換,如:日期(Date)。
轉換器類
(1)繼承DefaultTypeConverter類
示例如下:
編寫類型轉化器DateConverter(可以自己定義名稱),需要繼承DefaultTypeConverter類。
publicclass DateConverter extends DefaultTypeConverter{
@Override
public Object convertValue(Map<String, Object> context, Object value, Class toType) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
try {
if(toType == Date.class){//當字符串向Date類型轉換時
String[] params = (String[]) value;// request.getParameterValues()
return dateFormat.parse(params[0]);
}elseif(toType== String.class){//當Date轉換成字符串時
Date date = (Date) value;
return dateFormat.format(date);
}
} catch (ParseException e) {}
returnnull;
}
}
(1)繼承StrutsTypeConverter類
繼承StrutsTypeConverter類通常需要重寫兩個方法:convertFromString()和convertToString()方法。
convertFromString()方法用於將字符串轉化爲指定類型,convertToString()方法用於將指定類型轉化爲字符串。
示例如下:
publicclass DateConverter2 extends StrutsTypeConverter { private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd"); @Override public Object convertFromString(Map context, String[] values, Class toType) { if(toType==Date.class){ try { return dateFormat.parse(values[0]); } catch (ParseException e) { e.printStackTrace(); } } returnnull; } @Override public String convertToString(Map context, Object obj) { Date date=(Date)obj; return dateFormat.format(date); } } |
類型轉換器註冊
局部類型轉換器
在Action類所在的目錄下創建一個ActionClassName-conversion.properties文件,ActionClassName是Action的類名,後面的-conversion.properties是固定寫法,在properties文件中的寫法如下:
createTime=com.chen.converter.DateConverter
全局類型轉換器
可以將上面定義的日期類型轉化器註冊爲全局類型轉換器,使其在整個項目中都起作用。
(1)在src目錄下創建xwork-conversion.properties文件;
(2)在properties文件中的內容爲:
待轉換的類型=類型轉換器的全類名
示例如下:
java.util.Date=com.chen.converter.DateConverter