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