• Struts2自定义类型转换器


    package com.loaderman.d_type;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import org.apache.struts2.util.StrutsTypeConverter;
    
    /**
     * 自定义类型转换器类
    */
    public class MyConverter extends StrutsTypeConverter {
    
        // 新需求: 要求项目中要支持的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日..
    
        // 先定义项目中支持的转换的格式
        DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"),
                new SimpleDateFormat("yyyyMMdd"),
                new SimpleDateFormat("yyyy年MM月dd日") };
    
        /**
         * 把String转换为指定的类型 【String To Date】
         *
         * @param context
         *            当前上下文环境
         * @param values
         *            jsp表单提交的字符串的值
         * @param toClass
         *            要转换为的目标类型
         */
        @Override
        public Object convertFromString(Map context, String[] values, Class toClass) {
    
            // 判断: 内容不能为空
            if (values == null || values.length == 0) {
                return null;
            }
            // 判断类型必须为Date
            if (Date.class != toClass) {
                return null;
            }
    
            // 迭代:转换失败继续下一个格式的转换; 转换成功就直接返回
            for (int i=0; i<df.length; i++) {
                try {
                    return df[i].parse(values[0]);
                } catch (ParseException e) {
                    continue;
                }
            }
            return null;
        }
    
        @Override
        public String convertToString(Map context, Object o) {
            return null;
        }
    
    }


    Struts2中如何自定义类型转换器?
          接口 实现类
    Struts2中如何配置自定义转换器?

          1、自定义转换器继承StrutsTypeConverter
          2、重写convertFromString和convertToString方法
          3、注册转换器
                3.1 在Action所在包中建立
                       Action名-conversion.properties
                3.2 在3.1文件中添加以下数据
                       需要转换的字段名=自定义转换器类的权限定名
              birthday=cn.loaderman.convertor.DateTypeConvertor

    总结

          以上的转换器注册时候是与Action的名字相耦合的,因此只能在自己的Action中内部使 用,称之为局部转换器注册方式。

    Struts2中如何自定义全局类型转换器?
          实现的接口和继承的类都是相同的,本质上就是配置的方式不同。
    实现
        

     1、自定义转换器继承StrutsTypeConverter
          2、重写convertFromString和convertToString方法
          3、注册转换器
                3.1 在项目src目录下建立以下固定文件
                       xwork-conversion.properties   
                3.2 在3.1文件中添加以下数据
                       需要转换的类类型=转换器类的权限定名
                       如:  java.util.Date= cn.loaderman.converter.DateConverter

    总结

           该拦截器负责对错误信息进行拦截器 <interceptor name="conversionError“ class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>

    Struts2中局部和全局转换器的注册文件名为什么是固定的?

          1、struts-default.xml
           <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
          2、StrutsConversionErrorInterceptor源码
          3、2的父类ConversionErrorInterceptor源码
          4、intercept()方法中的XWorkConverter源码
          5、 XWorkConverter

  • 相关阅读:
    委托和事件的区别和联系(转载
    Captcha验证码识别走向3D化
    3DCaptcha for .net
    委托之异步(转自http://www.cnblogs.com/inforasc/archive/2009/10/21/1587756.html
    static的初始化顺序
    各式各样的验证码
    [SQL优化工具]SQL Tuning for SQL Server(转)
    浅析C#深拷贝与浅拷贝 (转载)
    [orcle] oracle截取字符串的函数substr
    struts2.0的工作原理
  • 原文地址:https://www.cnblogs.com/loaderman/p/10030783.html
Copyright © 2020-2023  润新知