|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-05-09
在form添加一个时间类型的字段:
<s:textfield name="basicCar.timeBuy" cssClass="input1" size="80" maxlength="150"/> 当输入 :2008-01-01后。成功提交。 当修改这条记录时 : 这个 输入框 回填成 :08-1-1 0:00:00.000 我希望回填成 输入时候的样子 就是 : 2008-01-01 不知道如何实现? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-09
写一个global converter专门针对java.utils.date具体做法如下
1.在src目录下创建xwork-conversion.properties加入如下配置 java.util.Date = com.fjimt.common.utils.DateTypeConverter 2.创建转化类DateTypeConverter该类继承StrutsTypeConverter实现 java.util.Date的双向转化,代码如下
public class DateTypeConverter extends StrutsTypeConverter {
private static final Logger log = Logger.getLogger(DateTypeConverter.class);
public static final String DEFAULT_DATE_FORMAT = "dd/MM/yyyy";
// 暂时只考虑这几种日期格式
public static final DateFormat[] ACCEPT_DATE_FORMATS = {
new SimpleDateFormat(DEFAULT_DATE_FORMAT),
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyy/MM/dd") };
/**
*
*/
public DateTypeConverter() {
}
/*
* (non-Javadoc)
*
* @see org.apache.struts2.util.StrutsTypeConverterconvertFromString(java.util.Map,
* java.lang.String[], java.lang.Class)
*/
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
if (values[0] == null || values[0].trim().equals(""))
return null;
for (DateFormat format : ACCEPT_DATE_FORMATS) {
try {
return format.parse(values[0]);
} catch (ParseException e) {
continue;
} catch (RuntimeException e) {
continue;
}
}
log.debug("can not format date string:" + values[0]);
return null;
}
/*
* (non-Javadoc)
*
* @see org.apache.struts2.util.StrutsTypeConverterconvertToString(java.util.Map,
* java.lang.Object)
*/
@Override
public String convertToString(Map context, Object o) {
if (o instanceof Date) {
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
try {
return format.format((Date) o);
} catch (RuntimeException e) {
return "";
}
}
return "";
}
}
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-09
我刚查了资料,也在考虑用转换器。 碰到个奇怪的问题 。我 xwork-conversion.properties放到了\web\WEB-INF\classes下里面 :
java.Util.Date=base.ssh.action.converter.DateConverter DateConverter.java package base.ssh.action.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.util.StrutsTypeConverter;
/**
* Date: 2008-5-10 9:12:06
* <p/>
* 说明 :
*/
public class DateConverter extends StrutsTypeConverter {
private static final Log _log = LogFactory.getLog(DateConverter.class);
/**
* 字符串转成时间
* @param context
* @param values
* @param toClass
* @return Object
*/
public Object convertFromString(Map context, String[] values, Class toClass) {
if (values.length > 0 && values[0] != null && values[0].trim().length() > 0) {
SimpleDateFormat sdf = new SimpleDateFormat();
try {
return sdf.parse(values[0]);
}
catch(ParseException e) {
_log.error("error converting value ["+values[0]+"] to Date ", e);
}
}
return null;
}
/**
* 转成 字符串
* @param context
* @param o
* @return String
*/
public String convertToString(Map context, Object o) {
if (o instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format((Date) o);
}
return "";
}
}
编译后运行,居然报 :
___ ... initialized Struts-Spring integration successfully
___ Conversion registration error
java.lang.ClassNotFoundException: base.ssh.action.converter.DateConverter
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1204)
我确信 base.ssh.action.converter.DateConverter 这个文件 就在 web\WEB-INF\classes\base\ssh\action\converter 下面 很奇怪 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-09
都这样了还不行,真的没法子了.
对了你没有从elipse中启动tomcat么. |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-09
myoldman 写道 都这样了还不行,真的没法子了.
对了你没有从elipse中启动tomcat么. 不是。我是直接 启动tomcat 然后用虚拟目录 : <Context crossContext="true" displayName="oa1.0.0" docBase="G:\project_mine\oa1.0\web" path="" > 位置指定没错.都做一个月了.就是这个目录 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-09
嗯,这个也是一种启动方法,以前用过,不过现在eclipse可以自动pulish就懒得再这么改了.
还是classNotFound么?有没有重新编译一下试试? |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-09
myoldman 写道 嗯,这个也是一种启动方法,以前用过,不过现在eclipse可以自动pulish就懒得再这么改了.
还是classNotFound么?有没有重新编译一下试试? 试了。 还那样报错。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-10
在属性中加上,theme="simple" 再拭拭吧.
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-26
java.Util.Date=base.ssh.action.converter.DateConverter
应写成 java.util.Date=base.ssh.action.converter.DateConverter |
|
| 返回顶楼 | |
|
最后更新时间:2008-06-23
奇怪的是,注册成局部转换器之后。在validation--input的时候,发现convertFromString正常工作(log.info有输出),但convertToString的结果竟然一直是08-1-1这样的格式,怀疑是内置转换器与自定义转换器之间的执行顺序有问题。
改成全局的则一切正常。 |
|
| 返回顶楼 | |








