当前位置:编程学习 > JAVA >>

struts2 自定义类型转换器 时间输出错误

public class HelloWord {
private Date time;

public Date getTime() {
return time;
}

public void setTime(Date time) {
System.out.println(time);
this.time = time;
}


public String execute() {
return "success";
}
}

自定义类型转换器:
public class DateCover extends DefaultTypeConverter {

public Object convertValue(Map arg0, Object value, Class toType) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try {
if (toType == Date.class) {// 当字符串向Date类型转换时
String[] params = (String[]) value;// Request.getParameterValues()
return dateFormat.parse(params[0]);
} else if (toType == String.class) {// 当Date转换成字符串时
Date date = (Date) value;
return dateFormat.format(date);
}
} catch (java.text.ParseException e) {
e.printStackTrace();
}

return null;
}
}

①当在IE地址栏中输入http://localhost:8080/struts2/abc/helloworld.action?time=20120701
相应的就会输出:time=Sun Jul 01 00:00:00 CST 2012
②当在IE地址栏中输入http://localhost:8080/struts2/abc/helloworld.action?time=2012-07-01
相应的就会输出:time=Wed Dec 07 00:00:00 CST 2011

问题:为什么自定义类型转换器后,给Date类型赋值正确的时间格式后,时间输出反而不对了呢? --------------------编程问答-------------------- 你用的是java.util.date还是 java.sql.date呢。 --------------------编程问答-------------------- 时间格式的话为防止出问题。你可以定义成一个String类型的。验证的时候判断一下是否是时间格式就行了。如果是就插入。如果不是给提示。不然用户随便输一个字符串,不是时间类型的你会报错。要么就用validation验证一下。 --------------------编程问答--------------------
引用 1 楼  的回复:
你用的是java.util.date还是 java.sql.date呢。

我用的是java.util.date --------------------编程问答-------------------- 我也碰到这个问题了,非常郁闷啊。是不是Struts2包版本的问题,我的是2.3.4.1 --------------------编程问答-------------------- 楼主说的格式不对,那对的格式应该是什么样的? --------------------编程问答-------------------- 你在页面使用<s:property value="time" />输出就会显示yyyyMMdd格式,但如果用${requestScope.user.birth}则显示Sun Jul 01 00:00:00 CST 2012这种格式。 --------------------编程问答-------------------- 试试其他浏览器?
输出还是date类型的 --------------------编程问答-------------------- 两个请求都进你自定义的转换器方法了么?会不会还进了struts自带的转换器? --------------------编程问答-------------------- lz,这输出不恰恰就是你自定义出来的嘛 yyyyMMdd
结果符合预期 --------------------编程问答-------------------- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try {
if (toType == Date.class) {// 当字符串向Date类型转换时
String[] params = (String[]) value;// Request.getParameterValues()
return dateFormat.parse(params[0]);
楼主的代码声明的是yyyyMMdd的
你还用它去转
直接用默认的
SimpleDateFormat dateFormat = new SimpleDateFormat();
date = dateFormat .parse(params[0]);
用这个试试 --------------------编程问答-------------------- <s:date name="mydate" format="yyyy年MM月dd日"/>怎么不直接用这个标签 --------------------编程问答--------------------
引用 9 楼 dracularking 的回复:
lz,这输出不恰恰就是你自定义出来的嘛 yyyyMMdd
结果符合预期


感觉在理。。。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,