Struts 1.x的类型转换器

在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代码
  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. }  
package com.yx.zzg.struts;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

/**
 * java.util.Date类型转换器
 * @author Administrator
 *
 */
public class UtilDateConverter implements Converter {

 public Object convert(Class type, Object value) {
  System.out.println("UtilDateConverter.value=" + value);
  if (value == null) {
   return value;
  }
  if (value instanceof Date) {
   return value;
  }
  Date d = null;
  if (value instanceof String) {
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   try {
    d = sdf.parse((String)value);
   } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return d;
 }

}



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

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

Java代码
  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. }  
package com.yx.zzg.struts;

import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.commons.beanutils.ConvertUtils;

/**
 * 注册java.util.date转换器
 * @author Administrator
 *
 */
public class UtilDateConverterInitWithServlet extends HttpServlet {

 @Override
 public void init() throws ServletException {
  System.out.println("UtilDateConverterInitWithServlet.init()");
  //注册自定义类型转换器
                ConvertUtils.register(new UtilDateConverter(), Date.class);
 }

}



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

Java代码
  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>  
<servlet>
   <servlet-name>UtilDateConverterInitWithServlet</servlet-name>
   <servlet-class>com.yx.zzg.struts.UtilDateConverterInitWithServlet</servlet-class>
   <load-on-startup>3</load-on-startup>
  </servlet>



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

Java代码
  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. }  
package com.yx.zzg.struts;

import java.util.Date;

import javax.servlet.ServletException;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

public class UtilDateConverterInitWithPlugin implements PlugIn {

 public void destroy() {
 }

 public void init(ActionServlet servlet, ModuleConfig config)
   throws ServletException {
  System.out.println("UtilDateConverterInitWithPlugin.init()");
  ConvertUtils.register(new UtilDateConverter(), Date.class);
 }
}



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

Java代码
  1. <plug-in className="com.yx.zzg.struts.UtilDateConverterInitWithPlugin"/>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值