struts 有什么好办法处理ActionForm中Date对象

ben0759 2009-04-18 02:08:17
我用的是struts 1.3
好像在struts中需要录入数据,但是struts不支持对Date对象的解析,大家有什么好办法去将string转换成Date吗?
...全文
632 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
men2011it 2012-03-19
  • 打赏
  • 举报
回复
创建一个日期转换器类DateConverter.java,该类代码如下:

程序代码

package zizz.struts;

import java.text.SimpleDateFormat;
import org.apache.commons.beanutils.Converter;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.text.ParseException;

/**
*
* 日期转换对象,使用该转换器,在BaseForm当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象.
* @author zizz.
* Create Time:2006-9-11 19:11:47.
*/
public class DateConverter implements Converter {
/**
* 日期格式化对象.
*/
private static SimpleDateFormat df = new SimpleDateFormat();

/**
* 模式集合.
*/
private static Set<String> patterns = new HashSet<String>();
//注册一下日期的转换格式
static{
DateConverter.patterns.add("yyyy-MM-dd");
DateConverter.patterns.add("yyyy-MM-dd HH:mm");
DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss");
DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss");
}

/**
* 日期转换器.
* @param type Class
* @param value Object
* return Date Object.
*/
public Object convert(Class type,Object value){
if(value == null){
return null;
}else if(value instanceof String){
Object dateObj = null;
Iterator it = patterns.iterator();
while(it.hasNext()){
try{
String pattern = (String)it.next();
df.applyPattern(pattern);
dateObj = df.parse((String)value);
break;
}catch(ParseException ex){
//do iterator continue
}
}
return dateObj;
}else{
return null;
}
}
}

在Form里注册
public class UserForm extends ActionForm{

static{
ConvertUtils.register(new DateConverter(), Date.class);
}

}
cxalxpks 2009-04-21
  • 打赏
  • 举报
回复
只要在数据库里 把 日期都定义为了 varchar(20) 了, 在页面做验证就可以了。。那样就不用那么麻烦了
ben0759 2009-04-21
  • 打赏
  • 举报
回复
还有吗?
ben0759 2009-04-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ethan119 的回复:]
差一点点忘了,这个依赖于commons-beanutils包。我都是在form-〉vo这个时候用beanutils自动转换的,试了才知道原来struts也在用beanutils做转换,而且转换成功就赋值给ActionForm。
[/Quote]

所以应该怎么讲string转换成date呢。。
gwikimo 2009-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wad12302 的回复:]
一般看来 是弄一个Converter  专门处理java.util.Date

主要代码如下UtilDateConverter.java
Java code


public class UtilDateConverter implements Converter {

private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

public Object convert(Class type, Object value) {
if (value == null) {
return value;
}
if (value instanceof Date) {

[/Quote]

如7楼所说,采用Converter方式可以处理,然后通过Servlet加载,印象在中,也可以通过Plug-In的方式进行加载。
ethan119 2009-04-19
  • 打赏
  • 举报
回复
差一点点忘了,这个依赖于commons-beanutils包。我都是在form-〉vo这个时候用beanutils自动转换的,试了才知道原来struts也在用beanutils做转换,而且转换成功就赋值给ActionForm。
ethan119 2009-04-19
  • 打赏
  • 举报
回复
测试了下,如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,Struts才可以转换。
wad12302 2009-04-18
  • 打赏
  • 举报
回复
一般看来 是弄一个Converter 专门处理java.util.Date

主要代码如下UtilDateConverter.java


public class UtilDateConverter implements Converter {

private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

public Object convert(Class type, Object value) {
if (value == null) {
return value;
}
if (value instanceof Date) {
return value;
}
if (value instanceof String) {
try {
return format.parse((String)value);
} catch (ParseException ignore) {
}
}
return null;
}

}


然后在弄个servlet 。InitServlet.java

public class InitServlet extends HttpServlet {

@Override
public void init() throws ServletException {

//注册日期类型的转换器
ConvertUtils.register(new UtilDateConverter(), Date.class);

}

}




注意配置 InitServlet 哦 在 web.xml 里里面配置
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.xxx.xxx.xxx.InitServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
xia0jieli 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dadizhilong 的回复:]
用个javabean比较好做的。也更加方便点。
javabean里面用java.sql.Data
[/Quote]

我同意这个。。如果是Hibernate的话,最好把映射文件里的type改成java.sql.Date..
chenleicom 2009-04-18
  • 打赏
  • 举报
回复
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");
String s="1998-01-02";
Date date = formatter.parse(s);
dadizhilong 2009-04-18
  • 打赏
  • 举报
回复
用个javabean比较好做的。也更加方便点。
javabean里面用java.sql.Data
ethan119 2009-04-18
  • 打赏
  • 举报
回复
sorry,看错了,Struts不会把一个字符串转化成Date再存到form里的,再用一层vo吧,把form的内容封装到一个或多个vo实例中,这样更符合面向对象的思想,呵呵。
ben0759 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ethan119 的回复:]
Validator里有现成的验证实例。验证通过了就可以把String转成Date了。
[/Quote]

具体是怎么样的?
ethan119 2009-04-18
  • 打赏
  • 举报
回复
Validator里有现成的验证实例。验证通过了就可以把String转成Date了。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧