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

本文介绍如何在Struts1.x中创建自定义类型转换器来处理Date类型的字段,包括实现Converter接口的方法及两种注册方式:通过Servlet和Struts插件。

在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"/>   

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zygsee/archive/2010/03/26/5418865.aspx

【评估多目标跟踪方法】9个高度敏捷目标在编队中的轨迹和测量研究(Matlab代码实现)内容概要:本文围绕“评估多目标跟踪方法”,重点研究9个高度敏捷目标在编队飞行中的轨迹生成与测量过程,并提供完整的Matlab代码实现。文中详细模拟了目标的动态行为、运动约束及编队结构,通过仿真获取目标的状态信息与观测数据,用于验证和比较不同多目标跟踪算法的性能。研究内容涵盖轨迹建模、噪声处理、传感器测量模拟以及数据可视化等关键技术环节,旨在为雷达、无人机编队、自动驾驶等领域的多目标跟踪系统提供可复现的测试基准。; 适合人群:具备一定Matlab编程基础,从事控制工程、自动化、航空航天、智能交通或人工智能等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于多目标跟踪算法(如卡尔曼滤波、粒子滤波、GM-CPHD等)的性能评估与对比实验;②作为无人机编队、空中交通监控等应用场景下的轨迹仿真与传感器数据分析的教学与研究平台;③支持对高度机动目标在复杂编队下的可观测性与跟踪精度进行深入分析。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注轨迹生成逻辑与测量模型构建部分,可通过修改目标数量、运动参数或噪声水平来拓展实验场景,进一步提升对多目标跟踪系统设计与评估的理解。
本软件实现了一种基于时域有限差分法结合时间反转算法的微波成像技术,旨在应用于乳腺癌的早期筛查。其核心流程分为三个主要步骤:数据采集、信号处理与三维可视化。 首先,用户需分别执行“WithTumor.m”与“WithoutTumor.m”两个脚本。这两个程序将在模拟生成的三维生物组织环境中进行电磁仿真,分别采集包含肿瘤模型与不包含肿瘤模型的场景下的原始场数据。所获取的数据将自动存储为“withtumor.mat”与“withouttumor.mat”两个数据文件。 随后,运行主算法脚本“TR.m”。该程序将加载上述两组数据,并实施时间反转算法。算法的具体过程是:提取两组仿真信号之间的差异成分,通过一组专门设计的数字滤波器对差异信号进行增强与净化处理,随后在数值模拟的同一组织环境中进行时间反向的电磁波传播计算。 在算法迭代计算过程中,系统会按预设的周期(每n次迭代)自动生成并显示三维模拟空间内特定二维切面的电场强度分布图。通过对比观察这些动态更新的二维场分布图像,用户有望直观地识别出由肿瘤组织引起的异常电磁散射特征,从而实现病灶的视觉定位。 关于软件的具体配置要求、参数设置方法以及更深入的技术细节,请参阅软件包内附的说明文档。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值