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

struts2 jsp->action 时间转换出错

jsp中时间是: 2013/12/18 18:05:06
action中有个bean对象,其中有属性 creatTime, 类型是Date

当提交action时,就会报错,并且说日期设置出错

请问Bean对象中的日期类型应该用什么?
谢谢! --------------------编程问答-------------------- 你需要指定一下啊 使用simpledateformat转换下啊
 SimpleDateFormat dateformat1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E"); 
转成这样的指定格式啊 --------------------编程问答--------------------
引用 1 楼 the_small_base_ 的回复:
你需要指定一下啊 使用simpledateformat转换下啊
 SimpleDateFormat dateformat1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E"); 
转成这样的指定格式啊


在哪里指定呢?不是直接转换吗?

action中的bean对象名称orgCata,有属性orgCata.createTime,类型为Date  getter/setter方法都有
jsp中
<input type="text" name="orgCata.createTime" value="<s:date name="orgCata.createTime" format="yyyy/MM/dd HH:mm:ss" />" /> --------------------编程问答-------------------- 我觉得你从页面到后台最好用字符串,然后在后台去转换 --------------------编程问答-------------------- 前台传来的都是以字符串型式。而你用Date接收会报错的,改成String就行了 --------------------编程问答-------------------- 直接设置为和数据对应字段相同的类型。 --------------------编程问答-------------------- struts2的默认时间格式是yyyy-MM-dd HH:mm:ss你bean里面已经用了Date类型只是你的格式不对,这时你可以用struts2的类型转换器,自己写个专门针对时间的类型转换器

public class DateTypeConvertor extends StrutsTypeConverter{
//时间字符串转成Date(即是你页面传来的时间字符串)
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Date date=null;
if(values!=null&&values.length>0){
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
try {
df.parse(values[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}

//将Date类型的数据转成时间字符串
@Override
public String convertToString(Map context, Object o) {
Date date=(Date)o;
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return df.format(date);
}

}

转换器写完后你可以指定到全局或局部.如果你整个项目的时间格式都是这样的可以指定到全局,我这里不清楚你是否整个项目都是这个格式使用局部转换器.
只要在这个Action相应的包上添加一个你Action类型-conversion.properties文件里面写上
#表示此action中orgCata属性的createTime属性使用DateTypeConvertor作转换
orgCata.createTime=DateTypeConvertor --------------------编程问答--------------------
引用 3 楼 hp0632 的回复:
我觉得你从页面到后台最好用字符串,然后在后台去转换


引用 4 楼 u012463264 的回复:
前台传来的都是以字符串型式。而你用Date接收会报错的,改成String就行了


Struts不是可以自动映射吗?为什么要自己在后台转换呢?
--------------------编程问答--------------------
引用 5 楼 fangmingshijie 的回复:
直接设置为和数据对应字段相同的类型。


createTime的类型是 Date,应该没有问题的吧 --------------------编程问答-------------------- 要自动转换,肯定是要配置的。有个类叫DefaultTypeConverter,继承这个类。还要创建properties文件,里面设置为ava.util.Date = xxxxx
xxxxx是继承DefaultTypeConverter的子类,在里面设置的。 --------------------编程问答--------------------
引用 6 楼 suciver 的回复:
struts2的默认时间格式是yyyy-MM-dd HH:mm:ss你bean里面已经用了Date类型只是你的格式不对,这时你可以用struts2的类型转换器,自己写个专门针对时间的类型转换器

public class DateTypeConvertor extends StrutsTypeConverter{
//时间字符串转成Date(即是你页面传来的时间字符串)
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Date date=null;
if(values!=null&&values.length>0){
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
try {
df.parse(values[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}

//将Date类型的数据转成时间字符串
@Override
public String convertToString(Map context, Object o) {
Date date=(Date)o;
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return df.format(date);
}

}

转换器写完后你可以指定到全局或局部.如果你整个项目的时间格式都是这样的可以指定到全局,我这里不清楚你是否整个项目都是这个格式使用局部转换器.
只要在这个Action相应的包上添加一个你Action类型-conversion.properties文件里面写上
#表示此action中orgCata属性的createTime属性使用DateTypeConvertor作转换
orgCata.createTime=DateTypeConvertor



按照你的方法,不知道为什么还是不能自动转换,DateTypeConvertor.java这个类中的方法没有被执行。

现在有以下问题:
1.maven打包时,忽略了conversion.properties文件
2.后来手动把这个文件拷贝相应.class文件所在的包下面,重启tomcat,不能成功

不知道什么原因。。。 --------------------编程问答--------------------
引用 10 楼 Zhou_Andy 的回复:
按照你的方法,不知道为什么还是不能自动转换,DateTypeConvertor.java这个类中的方法没有被执行。

现在有以下问题:
1.maven打包时,忽略了conversion.properties文件
2.后来手动把这个文件拷贝相应.class文件所在的包下面,重启tomcat,不能成功

不知道什么原因。。。

conversion.properties文件名是否是ActionClassName-conversion.properties.是否放在action的同一个包下对于转换器的配置楼主更多的可以看struts2的开发文档 --------------------编程问答--------------------
引用 10 楼 Zhou_Andy 的回复:
Quote: 引用 6 楼 suciver 的回复:

struts2的默认时间格式是yyyy-MM-dd HH:mm:ss你bean里面已经用了Date类型只是你的格式不对,这时你可以用struts2的类型转换器,自己写个专门针对时间的类型转换器

public class DateTypeConvertor extends StrutsTypeConverter{
//时间字符串转成Date(即是你页面传来的时间字符串)
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Date date=null;
if(values!=null&&values.length>0){
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
try {
df.parse(values[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}

//将Date类型的数据转成时间字符串
@Override
public String convertToString(Map context, Object o) {
Date date=(Date)o;
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return df.format(date);
}

}

转换器写完后你可以指定到全局或局部.如果你整个项目的时间格式都是这样的可以指定到全局,我这里不清楚你是否整个项目都是这个格式使用局部转换器.
只要在这个Action相应的包上添加一个你Action类型-conversion.properties文件里面写上
#表示此action中orgCata属性的createTime属性使用DateTypeConvertor作转换
orgCata.createTime=DateTypeConvertor



按照你的方法,不知道为什么还是不能自动转换,DateTypeConvertor.java这个类中的方法没有被执行。

现在有以下问题:
1.maven打包时,忽略了conversion.properties文件
2.后来手动把这个文件拷贝相应.class文件所在的包下面,重启tomcat,不能成功

不知道什么原因。。。


如果应用到全局 xwork-conversion.properties 就是可以的 --------------------编程问答--------------------
引用 12 楼 Zhou_Andy 的回复:
Quote: 引用 10 楼 Zhou_Andy 的回复:

Quote: 引用 6 楼 suciver 的回复:

struts2的默认时间格式是yyyy-MM-dd HH:mm:ss你bean里面已经用了Date类型只是你的格式不对,这时你可以用struts2的类型转换器,自己写个专门针对时间的类型转换器

public class DateTypeConvertor extends StrutsTypeConverter{
//时间字符串转成Date(即是你页面传来的时间字符串)
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Date date=null;
if(values!=null&&values.length>0){
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
try {
df.parse(values[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}

//将Date类型的数据转成时间字符串
@Override
public String convertToString(Map context, Object o) {
Date date=(Date)o;
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return df.format(date);
}

}

转换器写完后你可以指定到全局或局部.如果你整个项目的时间格式都是这样的可以指定到全局,我这里不清楚你是否整个项目都是这个格式使用局部转换器.
只要在这个Action相应的包上添加一个你Action类型-conversion.properties文件里面写上
#表示此action中orgCata属性的createTime属性使用DateTypeConvertor作转换
orgCata.createTime=DateTypeConvertor



按照你的方法,不知道为什么还是不能自动转换,DateTypeConvertor.java这个类中的方法没有被执行。

现在有以下问题:
1.maven打包时,忽略了conversion.properties文件
2.后来手动把这个文件拷贝相应.class文件所在的包下面,重启tomcat,不能成功

不知道什么原因。。。


如果应用到全局 xwork-conversion.properties 就是可以的



找到原因了,conversion.properties文件名称写的不正确

之前写成Action对应的java类的名称作为前缀,即有java文件 AgencyMgmtAction.java,文件名称为AgencyMgmtAction-conversion.properties; 而这个action在struts.xml中对应的name是editAgency,改为editAgency-conversion.properties就可以了
--------------------编程问答-------------------- 不过有个奇怪问题,maven打包时,为什么会遗漏这个properties文件?? --------------------编程问答--------------------
引用 14 楼 Zhou_Andy 的回复:
不过有个奇怪问题,maven打包时,为什么会遗漏这个properties文件??

楼主你的pom.xml的maven打包配置文件是不是只编译打包.java
你可以在pom.xml里面的<resource>节点里面增加<includes>**/*.properties</includes> --------------------编程问答--------------------
引用 15 楼 suciver 的回复:
Quote: 引用 14 楼 Zhou_Andy 的回复:

不过有个奇怪问题,maven打包时,为什么会遗漏这个properties文件??

楼主你的pom.xml的maven打包配置文件是不是只编译打包.java
你可以在pom.xml里面的<resource>节点里面增加<includes>**/*.properties</includes>


Suciver, 能不能给个较为完整的pom.xml配置?
我直接在build下面增加resource后,properties文件是打包进去了,但是resources目录下的文件就不能打包进去

web开发,我是新手,公司就我一个人做这个东西,不懂的太多啊。。。
--------------------编程问答--------------------
引用 16 楼 Zhou_Andy 的回复:
Quote: 引用 15 楼 suciver 的回复:

Quote: 引用 14 楼 Zhou_Andy 的回复:

不过有个奇怪问题,maven打包时,为什么会遗漏这个properties文件??

楼主你的pom.xml的maven打包配置文件是不是只编译打包.java
你可以在pom.xml里面的<resource>节点里面增加<includes>**/*.properties</includes>


Suciver, 能不能给个较为完整的pom.xml配置?
我直接在build下面增加resource后,properties文件是打包进去了,但是resources目录下的文件就不能打包进去

web开发,我是新手,公司就我一个人做这个东西,不懂的太多啊。。。

完整的配置文件你google下吧我手上现在没有了,像ant或者maven这样的配置文件我基本都是copy下来改改
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,