前提:
类型转换需要实现defaultTypeconverter的public Object convertValue(Map<String, Object> context, Object value, Class toType) 方法
有全局类型转转换和局部类型转换,后者会覆盖前者
全局写法:在src下建xwork.conversion.properties文件
局部写法:在当前类下建ActionName.conversion.properties文件。
定义时间转换类DateConverter
public class DateConverter extends DefaultTypeConverter
说明:在这里我们以对时间转换为例,并且分别在全局和局部下传多个和一个时间进行对比。
一个局部:
jsp:创建开始日期:<input type="text" name="strartDate" value="11111111">格式yyyyMMdd<br>
Action类:private Date strartDate;
ActionName.conversion.properties: strartDate=DateConverter全路径
DateConverter主要代码:
if(toType!=java.util.Date.class){
return null;
}
if(value instanceof java.lang.String[]){
String [] strDate = (String[])value;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");//定义转换的格式
Date date = null;
try {
date = format.parse(strDate[0]);
} catch (ParseException e) {
return null;
}
return date;
}
一个全局:
jsp:创建开始日期:<input type="text" name="strartDate" value="11111111">格式yyyyMMdd<br>
Action类:private Date strartDate;
ActionName.conversion.properties: java.util.Date=DateConverter全路径DateConverter主要代码:
if(toType!=java.util.Date.class){
return null;
}
if(value instanceof java.lang.String[]){
String [] strDate = (String[])value;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");//定义转换的格式
Date date = null;
try {
date = format.parse(strDate[0]);
} catch (ParseException e) {
return null;
}
return date;
}
多个局部:
jsp:创建开始日期:<input type="text" name="strartDate" value="11111111">格式yyyyMMdd<br>
创建结束日期:<input type="text" name="strartDate" value="22222222">格式yyyyMMdd<br>
Action类:private Date[] strartDate;
ActionName.conversion.properties: strartDate=DateConverter全路径DateConverter主要代码:
if(toType !=java.util.Date.class[]){
System.err.println("进来3");
return null;
}
if(value instanceof String[]){
System.err.println("进来4");
Date[] Dates = new Date [2];
String[] DateArray = (String[])value;
SimpleDateFormat format = new SimpleDateFormat("yyyMMdd");
System.out.println(DateArray.length+"长度");
for(int i = 0;i<DateArray.length;i++){
try {
Dates[i] = format.parse(DateArray[i]);
System.out.println("************"+Dates[i]);
} catch (ParseException e) {
// TODO Auto-generated catch block
return null;
}
}
return Dates;
}
多个全局:
jsp:创建开始日期:<input type="text" name="strartDate" value="11111111">格式yyyyMMdd<br>
创建结束日期:<input type="text" name="strartDate" value="22222222">格式yyyyMMdd<br>
Action类:private Date[] strartDate;
ActionName.conversion.properties: java.util.Date=DateConverter全路径DateConverter主要代码:
if(toType !=java.util.Date.class){
System.out.println("全局时他传的是一个Date类型不是Date类型数组");
return null;
}
if(value instanceof java.lang.String){
String DateStr = (String)value;
SimpleDateFormat format = new SimpleDateFormat("yyyMMdd");
Date dates = null;
try {
dates = format.parse(DateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dates;
}else {
System.out.println("全局时传的是一个字符串,不是字符串数组");
}
总结:
传一个不管全局还是局部toType不是数组 value是数组
传多个时全局:toType不是数组,分多次传每传一个,value也不是娄数组
传多个时局部:totype是数组一次传,value是数组