`
newleague
  • 浏览: 1472157 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

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

分享到:
评论

相关推荐

    Struts2 in action中文版

    5.3.1 立即可用的类型转换器 89 5.3.2 使用OGNL表达式从表单字段名映射到属性 90 5.4 自定义类型转换 101 5.4.1 实现类型转换器 102 5.4.2 在String和Circle之间转换 102 5.4.3 配置框架使用自定义转换器 103 5.5 小...

    struts2讲义_吴峻申

    7.1 Struts2类型转换使用介绍 135 7.1.1 基本数据类型转换功能 135 7.1.2 List集合类型数据类型转换功能 138 7.1.3 Set集合类型数据类型转换功能 141 7.2 类型转换发生异常处理方案 144 7.2.1 Struts2自带异常提示 ...

    深入浅出Struts2(附源码)

    7.3.1 对自定义的类型转换器进行配置 126 7.3.2 自定义的类型转换器示例 127 7.4 扩展StrutsTypeConverter类 130 7.5 与复杂对象配合使用 134 7.6 与Collection配合使用 137 7.7 与Map配合使用 142 7.8 小结 ...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    7.3.1 对自定义的类型转换器进行配置 126 7.3.2 自定义的类型转换器示例 127 7.4 扩展StrutsTypeConverter类 130 7.5 与复杂对象配合使用 134 7.6 与Collection配合使用 137 7.7 与Map配合使用 142 7.8 小结 145 第...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    3.3 使用转换器完成类型转换 143 3.3.1 转换器概述、用途 144 3.3.2 JSF内建转换器 144 3.3.3 使用转换器 145 3.3.4 转换失败后的错误消息 149 3.4 自定义转换器 154 3.4.1 实现转换器类 154 3.4.2 注册转换器 156 ...

    JAVA程序开发大全---上半部分

    本书系统全面地介绍了Java中的各项主流技术,以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具MyEclipse为载体,全面系统地介绍了如何在MyEclipse中开发基于Struts、Hibernate、...

    Java Web程序设计教程

    6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3输入校验 123 6.3.1输入校验的必要性 123 6.3.2编程方式实现输入校验 125 6.3.3...

    web开发常用jar

    web开发常用jar包 常用jar包 commons-beanutils.jar Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-collections.jar Apache Commons包中的一个,包含了一些Apache开发的集合类,...

    外文翻译 stus MVC

    Struts——an open-source MVC implementation This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology. Struts can help you control...

    Struts in Action中文版

    2.2.3. Struts控制器组件................................................................................................39 2.2.4. 用 Struts 开发Web 应用...................................................

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    8.3.3 关联转换器与UI Component实例 8.3.4 转换器的生命周期 8.3.5 定制转换器 8.4 Faces验证系统 8.4.1 Long Range Validator 8.4.2 Double Range Validator 8.4.3 Length Validator 8.4.4 必需的工具Required ...

    struts in Action

    2.2.3. Struts 控制器组件................................................................................................39 2.2.4. 用Struts 开发Web 应用....................................................

    java开发常用jar包

    Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大 commons-lang.jar Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。 commons-...

    JAVA WEB典型模块与项目实战大全

    1.2 配置开发环境  1.3 基础技术简单简介  1.4 核心框架初步认识  1.5 小结  第2章 myedipse开发工具对各种框架的支持  2.1 使用jsp的两种模式  2.2 struts框架的实现  2.3 hibernate框架的实现  ...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    8.3.3 关联转换器与UI Component实例 8.3.4 转换器的生命周期 8.3.5 定制转换器 8.4 Faces验证系统 8.4.1 Long Range Validator 8.4.2 Double Range Validator 8.4.3 Length Validator 8.4.4 必需的工具Required ...

    AnyFo - Struts 2_1爆胎易筋丸.pdf

    1.2 基础开发..................................................................................................................4 1.2.1 输入页面.............................................................

Global site tag (gtag.js) - Google Analytics