Struts1.2 开发自己的类型转换器

在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方法。
view plaincopy to clipboardprint?
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;     
    }     
    

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方法

view plaincopy to clipboardprint?
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);     
    }     
    
}  
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文件便完成了注册。

view plaincopy to clipboardprint?
<servlet>     
    <servlet-name>UtilDateConverterInitWithServlet</servlet-name>     
    <servlet-class>com.yx.zzg.struts.UtilDateConverterInitWithServlet</servlet-class>     
    <load-on-startup>3</load-on-startup>     
  </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接口,并且实现其方法。

view plaincopy to clipboardprint?
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);     
    }     
}   
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文件便完成了注册

view plaincopy to clipboardprint?
<plug-in className="com.yx.zzg.struts.UtilDateConverterInitWithPlugin"/>   

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zygsee/archive/2010/03/26/5418865.aspx

你可能感兴趣的:(java,apache,sql,struts,servlet)