第七记:自定义类型转换器(以时间类型转换器为例)
1、局部类型转换器
1-1:遵循时间规范的字符串自动类型转换
如:UserAction中的时间
public class UserAction{
private Date today;
public void setToday(Date today){
this.today=today;
}
public Date getToday(){
return this.today;
}
public String printDate(){
System.out.println(this.getToday());
return "SUCCESS";
}
}
若struts.xml中UserAction的别名是users,那么它的访问路径是users!printDate.action?today=2012-7-22。
注意:若today=20120722这不能通过自动类型转换,程序判定today为String类型而不是Date类型。
1-2:String类型和Date类型匹配策略
例如:这里存在一个DateConverter
public class DateConverter extends DefaultTypeConverter{
@override
public Object convertvalue(Map<String,Object> context,Object value, Class toType){
SimpleDateFormat sdf=new SimpleDateFormat ("yyyyMMdd");
try{
if(toType==Date.class){
String [] params=String [] | value;
return sdf.parse(params[0]);
}else if(toType==Date.class){
Date date=(Date)value;
return sdf.format(date);
}
}catch(Exception e){ }
return null;
}
}
注册Action对应的转换器的属性文件:规则ActionName-conversion.properties
如:UserAction-conversion.properties
文件内容:如today=com.xxxx.DateConverter#key是要转换的字段,value是类型转换器的路径
2、全局类型转换器
此时的属性文件改成:xwork-conversion.properties
如定义所有的时间类型转换器都通过DateConverter,则:
java.utils.Date=com.xxxx.DateConverter