struts 1.x转换器

本文介绍如何在Struts 1.x中创建自定义类型转换器以支持java.util.Date类型的转换。通过实现Struts的Converter接口并注册自定义转换器,解决了Struts默认不支持某些日期格式的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts 1.x中提供了一个类型转换器的功能。 
例如:声明一个boolean类型的属性,当把这个属性的值设为Yes,1,on或Y等等时Struts 会把它自动的转换成True类型。 

但有些类型Struts 却无法转换。 
例如Date 类型的转换: 
   * 如果是java.sql.Date ,页面日期格式必须为yyyy-mm-dd,才可以转换 
   * 如果是java.util.Date ,默认情况下Struts 无法转换。 

解决办法是我们可以设计一个自定义类型转换器。 

自定义类型转换器的实现步骤: 

1.实现Struts 的converter接口,并实现其convert方法。

[java]  view plain copy
  1. package com.yx.zzg.<span class="hilite1">struts</span>  
  2.   
  3. ;  
  4.   
  5. import java.text.ParseException;  
  6. import java.text.SimpleDateFormat;  
  7. import java.util.<span class="hilite3">Date</span>  
  8.   
  9. ;  
  10.   
  11. import org.apache.commons.beanutils.Converter;  
  12.   
  13. /** 
  14.  * java.util.<span class="hilite3">Date</span> 
  15.  
  16. 类型转换器 
  17.  * @author Administrator 
  18.  * 
  19.  */  
  20. public class UtilDateConverter implements Converter {  
  21.   
  22.     public Object convert(Class type, Object value) {  
  23.         System.out.println("UtilDateConverter.value=" + value);  
  24.         if (value == null) {  
  25.             return value;  
  26.         }  
  27.         if (value instanceof <span class="hilite3">Date</span>  
  28.   
  29. ) {  
  30.             return value;  
  31.         }  
  32.         <span class="hilite3">Date</span>  
  33.   
  34.  d = null;  
  35.         if (value instanceof String) {  
  36.             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  37.             try {  
  38.                 d = sdf.parse((String)value);  
  39.             } catch (ParseException e) {  
  40.                 // TODO Auto-generated catch block  
  41.                 e.printStackTrace();  
  42.             }  
  43.         }  
  44.         return d;  
  45.     }  
  46.   
  47. }  

[java]  view plain copy
  1. package com.yx.zzg.struts;    
  2.     
  3. import java.text.ParseException;    
  4. import java.text.SimpleDateFormat;    
  5. import java.util.Date;    
  6.     
  7. import org.apache.commons.beanutils.Converter;    
  8.     
  9. /**  
  10.  * java.util.Date类型转换器  
  11.  * @author Administrator  
  12.  *  
  13.  */    
  14. public class UtilDateConverter implements Converter {    
  15.     
  16.     public Object convert(Class type, Object value) {    
  17.         System.out.println("UtilDateConverter.value=" + value);    
  18.         if (value == null) {    
  19.             return value;    
  20.         }    
  21.         if (value instanceof Date) {    
  22.             return value;    
  23.         }    
  24.         Date d = null;    
  25.         if (value instanceof String) {    
  26.             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");    
  27.             try {    
  28.                 d = sdf.parse((String)value);    
  29.             } catch (ParseException e) {    
  30.                 // TODO Auto-generated catch block    
  31.                 e.printStackTrace();    
  32.             }    
  33.         }    
  34.         return d;    
  35.     }    
  36.     
  37. }   


2.注册自定义的类型转换器,即把我们自定义的类型转换器注册到 Struts 的类型转换器中。 
通常有两种方式类实现注册。 

第一种方法采用Servlet的方式: 
1.首先定义一个Servlet,并覆写他的init方法   

[java]  view plain copy
  1. package com.yx.zzg.<span class="hilite1">struts</span>  
  2.   
  3. ;  
  4.   
  5. import java.util.<span class="hilite3">Date</span>  
  6.   
  7. ;  
  8.   
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11.   
  12. import org.apache.commons.beanutils.ConvertUtils;  
  13.   
  14. /** 
  15.  * 注册java.util.<span class="hilite3">date</span> 
  16.  
  17. 转换器 
  18.  * @author Administrator 
  19.  * 
  20.  */  
  21. public class UtilDateConverterInitWithServlet extends HttpServlet {  
  22.   
  23.     @Override  
  24.     public void init() throws ServletException {  
  25.         System.out.println("UtilDateConverterInitWithServlet.init()");  
  26.         //注册自定义类型转换器  
  27.                 ConvertUtils.register(new UtilDateConverter(), <span class="hilite3">Date</span>  
  28.   
  29. .class);  
  30.     }  
  31.   
  32. }  

[java]  view plain copy
  1. package com.yx.zzg.struts;    
  2.     
  3. import java.util.Date;    
  4.     
  5. import javax.servlet.ServletException;    
  6. import javax.servlet.http.HttpServlet;    
  7.     
  8. import org.apache.commons.beanutils.ConvertUtils;    
  9.     
  10. /**  
  11.  * 注册java.util.date转换器  
  12.  * @author Administrator  
  13.  *  
  14.  */    
  15. public class UtilDateConverterInitWithServlet extends HttpServlet {    
  16.     
  17.     @Override    
  18.     public void init() throws ServletException {    
  19.         System.out.println("UtilDateConverterInitWithServlet.init()");    
  20.         //注册自定义类型转换器    
  21.                 ConvertUtils.register(new UtilDateConverter(), Date.class);    
  22.     }    
  23.     
  24. }  


2.然后配置web.xml文件便完成了注册。

  1.   <servlet>  
  2.     <servlet-name>UtilDateConverterInitWithServlet</servlet-name>  
  3.     <servlet-class >com.yx.zzg.struts.UtilDateConverterInitWithServlet</servlet- class >  
  4.     <load-on-startup>3 </load-on-startup>  
  5.   </servlet>  
[java]  view plain copy
  1. <servlet>  
  2.     <servlet-name>UtilDateConverterInitWithServlet</servlet-name>  
  3.     <servlet-class>com.yx.zzg.<span class="hilite1">struts</span>  
  4.   
  5. .UtilDateConverterInitWithServlet</servlet-class>  
  6.     <load-on-startup>3</load-on-startup>  
  7.   </servlet>  



第二种方式采用Struts 本身提供的plugin的方式 
1.首先定义一个类并实现PlugIn接口,并且实现其方法。

[java]  view plain copy
  1. package com.yx.zzg.struts;    
  2.     
  3. import java.util.Date;    
  4.     
  5. import javax.servlet.ServletException;    
  6.     
  7. import org.apache.commons.beanutils.ConvertUtils;    
  8. import org.apache.struts.action.ActionServlet;    
  9. import org.apache.struts.action.PlugIn;    
  10. import org.apache.struts.config.ModuleConfig;    
  11.     
  12. public class UtilDateConverterInitWithPlugin implements PlugIn {    
  13.     
  14.     public void destroy() {    
  15.     }    
  16.     
  17.     public void init(ActionServlet servlet, ModuleConfig config)    
  18.             throws ServletException {    
  19.         System.out.println("UtilDateConverterInitWithPlugin.init()");    
  20.         ConvertUtils.register(new UtilDateConverter(), Date.class);    
  21.     }    
  22. }   

[java]  view plain copy
  1. package com.yx.zzg.<span class="hilite1">struts</span>  
  2.   
  3. ;  
  4.   
  5. import java.util.<span class="hilite3">Date</span>  
  6.   
  7. ;  
  8.   
  9. import javax.servlet.ServletException;  
  10.   
  11. import org.apache.commons.beanutils.ConvertUtils;  
  12. import org.apache.<span class="hilite1">struts</span>  
  13.   
  14. .action.ActionServlet;  
  15. import org.apache.<span class="hilite1">struts</span>  
  16.   
  17. .action.PlugIn;  
  18. import org.apache.<span class="hilite1">struts</span>  
  19.   
  20. .config.ModuleConfig;  
  21.   
  22. public class UtilDateConverterInitWithPlugin implements PlugIn {  
  23.   
  24.     public void destroy() {  
  25.     }  
  26.   
  27.     public void init(ActionServlet servlet, ModuleConfig config)  
  28.             throws ServletException {  
  29.         System.out.println("UtilDateConverterInitWithPlugin.init()");  
  30.         ConvertUtils.register(new UtilDateConverter(), <span class="hilite3">Date</span>  
  31.   
  32. .class);  
  33.     }  
  34. }  



2.然后配置struts -config.xml文件便完成了注册

  1. <plug-in className= "com.yx.zzg.struts .UtilDateConverterInitWithPlugin" />  
转自: http://skyuck.javaeye.com/blog/479536
[java]  view plain copy
  1. <plug-in className="com.yx.zzg.<span class="hilite1">struts</span>  
  2.   
  3. .UtilDateConverterInitWithPlugin"/>  
[java]  view plain copy
  1. <plug-in className="com.yx.zzg.<span class="hilite1">struts</span>  
  2.   
  3.   
  4.   
  5. .UtilDateConverterInitWithPlugin"/>
  6. 转载自:http://blog.youkuaiyun.com/swandragon/article/details/4653817  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值