Struts下的文本字符串和日期之间转换

在Struts中我们经常要处理用户录入的日期字符串,将其转换为java.util.Date类型。在这里我们提供两种方式来实现这样的转换。

1 在ActionForm子类中,创建两个变量来处理日期,一个为Date类型,一个为String类型(临时变量),我们使用String类型的变量来接受用户的录入,再编码将其转换为Date类型,在页面输出时,在根据Date类型生成自定义的文本格式。这种方式灵活性大,不过需要你多付出点劳动。

2 编写一个plugin实现自动转换。Struts下各种对象类型的转换是通过BeanUtils的Converter实现,所以我们只需向 BeanUtils注册一个日期字符转换的Converter即可,这种方式不需要你编写代码进行转换,不过在页面呈现的时候,你可能需要进行格式化,从 Date对象之间生产的字符串(toString())往往不是你需要的,使用JSTL就可以的。

首先编写一个日期转换的Converter类:

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;
        }
    }
}

 然后编写一个Struts的plugin,执行Converter注册:

public class ConvertPlugIn implements PlugIn { 
public void destroy() { 
ConvertUtils.deregister(); 
} 
public void init(ActionServlet arg0, ModuleConfig arg1) 
throws ServletException { 
ConvertUtils.register(new DateConverter(), Date.class); 
} 
}

 

最后在struts-config.xml进行plugin声明:
<plug-in className="DateConverter" />

进行日期转换,这对Struts来说是非常有益的。Struts的ActionForm一直被认为是设计的缺陷,但是通过BeanUtils可以快速实现 ActionForm、VO、PO对象之间的转换,这就要求ActionForm设计比较合理,当然在ActionForm中实现从采集字符串到日期的转换会节省很多时间,我们只需关注域对象间的转换就可以啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值