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

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

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

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

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

Java代码   收藏代码
  1. import  java.text.SimpleDateFormat;  
  2. import  org.apache.commons.beanutils.Converter;  
  3. import  java.util.Set;  
  4. import  java.util.HashSet;  
  5. import  java.util.Iterator;  
  6. import  java.text.ParseException;  
  7.   
  8. /**  
  9.  
  10. * 日期转换对象,使用该转换器,在BaseForm当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象.  
  11. * @author zizz.  
  12. * Create Time:2006-9-11 19:11:47.  
  13. */   
  14. public   class  DateConverter  implements  Converter {  
  15.     /**  
  16.      * 日期格式化对象.  
  17.      */   
  18.     private   static  SimpleDateFormat df =  new  SimpleDateFormat();  
  19.       
  20.     /**  
  21.      * 模式集合.  
  22.      */   
  23.     private   static  Set<String> patterns =  new  HashSet<String>();  
  24.     //注册一下日期的转换格式   
  25.     static {  
  26.         DateConverter.patterns.add("yyyy-MM-dd" );  
  27.         DateConverter.patterns.add("yyyy-MM-dd HH:mm" );  
  28.         DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss" );  
  29.         DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss" );  
  30.     }  
  31.       
  32.     /**  
  33.      * 日期转换器.  
  34.      * @param type Class  
  35.      * @param value Object  
  36.      * return Date Object.  
  37.      */   
  38.     public  Object convert(Class type,Object value){  
  39.         if (value ==  null ){  
  40.             return   null ;  
  41.         }else   if (value  instanceof  String){  
  42.             Object dateObj = null ;  
  43.             Iterator it = patterns.iterator();  
  44.             while (it.hasNext()){  
  45.                 try {  
  46.                     String pattern = (String)it.next();  
  47.                     df.applyPattern(pattern);  
  48.                     dateObj = df.parse((String)value);  
  49.                     break ;  
  50.                 }catch (ParseException ex){  
  51.                     //do iterator continue   
  52.                 }  
  53.             }  
  54.             return  dateObj;  
  55.         }else {  
  56.             return   null ;  
  57.         }  
  58.     }  
  59. }  
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注册:

Java代码   收藏代码
  1. public   class  ConvertPlugIn  implements  PlugIn {   
  2. public   void  destroy() {   
  3. ConvertUtils.deregister();   
  4. }   
  5. public   void  init(ActionServlet arg0, ModuleConfig arg1)   
  6. throws  ServletException {   
  7. ConvertUtils.register(new  DateConverter(), Date. class );   
  8. }   
  9. }  
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、付费专栏及课程。

余额充值