一、对日期类型的转换
1、编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter
2、覆盖掉其中的public Object convertValue(Map<String, Object> context, Object value,Class toType)
context:OGNL表达式的上下文
value:实际的值。用户输入的都是字符串,但他是一个String数组。
toType:目标类型
public class DateConvertor extends DefaultTypeConverter {//Converter:转换
器
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
//yyyy/MM/dd格式的日期进行转换
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
//判断要转换的类型是否为Date类型,是的话转为日期类型
if(toType==Date.class){
//value可以当做字符串数组,进行强转
String strValue = ((String[])value)[0];
try {
//把字符串转为日期类型返回
return df.parse(strValue);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}else{
//如果目标类型不是Date,则把Date对象转为字符串返回出去,当前java.util.Date // 类型,数据库类型应另转
Date dValue = (Date)value;
//把日期对象转为字符串对象返回出去
return df.format(dValue);
}
}
}
3、注册类型转换器
1、局部类型转换器:只对当前的Action有效
具体做法:在动作类相同的包中,建立一个名称是“动作类名- conversion.properties”的配置文件,//conversion:变换,转换
文件中增加以下内容:要验证的字段=验证器的类全名
birthday=cn.java.convertor.DateConvertor
2、全局类型转换器:对所有的Action都有效
具体做法:在WEB-INF/classes目录下,建立一个名称为"xwork- conversion.properties"的配置文件,
文件中增加以下内容:目标类型全名=验证器的类全名
java.util.Date=cn.java.convertor.DateConvertor
5.类型转换异常的处理:
1.关键字用“input”。
2.要返回请求的页面才能提示错误。
例如:
<action name="fromAct" class="cn.java.action.FromStruts" method="fromAction">
<result name="from">/success.jsp</result>
<result name="input">/chain.jsp</result>
</action>