一、对日期类型的转换

   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>