Struts2——Data类型转换出错

Struts2 Date类型转换出错问题

参考:http://blog.csdn.net/ljl961890233bear/article/details/8108358

最近在学Struts2,学到类型转换的时候发现一个问题。当Action有一个属性类型为Date时,转换总是报错。各种尝试(google)之后发现是Struts2自身的问题,于是我找到Struts2自身的DateConverter,发现它其中有一段是这样写的:

 if (java.util.Date.class == toType) {
            Date check;
            DateFormat[] dfs = getDateFormats(locale);
            for (DateFormat df1 : dfs) {
                try {
                    check = df1.parse(sa);
                    df = df1;
                    if (check != null) {
                        break;
                    }
                } catch (ParseException ignore) {
          }
 }

getDateFormats方法:

 private DateFormat[] getDateFormats(Locale locale) {
    DateFormat dt1 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, locale);
    DateFormat dt2 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale);
    DateFormat dt3 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);

    DateFormat d1 = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    DateFormat d2 = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
    DateFormat d3 = DateFormat.getDateInstance(DateFormat.LONG, locale);

    DateFormat rfc3339         = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    DateFormat rfc3339dateOnly = new SimpleDateFormat("yyyy-MM-dd");

    return new DateFormat[]{dt1, dt2, dt3, rfc3339, d1, d2, d3, rfc3339dateOnly};
}

DateFormat rfc3339 = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss”);
DateFormat rfc3339dateOnly = new SimpleDateFormat(“yyyy-MM-dd”);

这两句固定了日期的格式,你必须按照它规定的格式输入,如:http://localhost:8080/project/test?date=1997-08-08

其他的看不懂,就不献丑了~

但是,我TM的格式没错啊,还是报错。无奈网上继续google,发现有大神自己定义了一个类型转换器解决,于是我也自己照猫画虎地写了一个:

public class DateConverter extends DefaultTypeConverter{
//接受的日期格式
public static final DateFormat[] ACCEPT_DATE_FORMATS = {
    new SimpleDateFormat("yyyy-MM-dd"),
    new SimpleDateFormat("yyyy/MM/dd")
};

public Object convertValue(Object value, Class toType){
    //浏览器接收 String 转换为 Date
    if(toType == Date.class){
        Date date = null;
        String dateString = null;
        String[] params = (String[])value;
        dateString = params[0];
        for(DateFormat format:ACCEPT_DATE_FORMATS){
            try {
                date = format.parse(dateString);
                return date;
            } catch (ParseException e) {
                continue;
            }
        }
        return null;
    }
    //服务器将 Date 转换为 String 传回浏览器
    else if(toType == String.class){
        Date date = (Date)value;
        return new SimpleDateFormat("yyyy/MM/dd").format(date);
    }
    //如果这个转换器无法处理便交由Struts2处理
    return super.convertValue(value, toType);
}

顺道学习一下自定义类型转换器的配置:

1.在src目录下新建配置文件 xwork-conversion.properties(src目录下必须这样命名)

ps:如果在包内的话,文件名为xxxAction-conversion.properties

2.在配置文件中写入所需要转换的类型和转换器
java.util.Date=com.javaweb.DateConverter

配置好后再重新部署一下,大功告成~

name:<s:property value="name"/><br>
age:<s:property value="age"/><br>
date:<s:property value="date"/><br>
<s:date name="date" format="YYYY-MM-dd"/><br>
interests:<s:property value="interests"/><br>
users:<s:property value="users"/><br>
<s:debug/>

阅读更多
文章标签: struts2.0
个人分类: Struts2
上一篇Struts2常用标签
下一篇JavaWeb学习路线
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭