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.itcast.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.itcast.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

猜你喜欢

转载自www.cnblogs.com/loaderman/p/10030783.html
今日推荐