Struts2下创建自定义类型转换器(表单中日期的处理)

在表单提交中需要有日期的输入,默认的Struts2处理机制可能不能满足需求,需要自定义一下类型转换器。如:
String----->java.util.Date:输入
java.util.Date------>String:输出:查询显示,输出错误回显
Struts2会按照**本地默认(与操作系统的区域有关yyyy-MM-dd)**格式自动转换
默认:yyyy-MM-dd-------java.util.Date转换
目标:实现MM/dd/yyyy<------>java.util.Date互相转换
类型转换器的根源、
1、在OGNL中有一个接口为TypeConverter
2、在WebWork中DefaultTypeConverter 实现了OGNL中的TypeConverter接口
3、在Struts2中的StrutsTypeConverter继承了WebWork中的DefaultTypeConverter类。
自定义类型转换器
1、编写一个类,继承StrutsTypeConverter

import org.apache.struts2.util.StrutsTypeConverter;
/**
 * 自定义类型转化
 */
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

//实现MM/dd/yyyy 与date进行转换(输入日期)
public class MyDateConverter extends StrutsTypeConverter {
    SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");

    /**
     * String---->其他类型Date
     * @param map
     * @param values 用户输入的值
     * @param aClass 目标类型
     * @return
     */
    @Override
    public Object convertFromString(Map map, String[] values, Class aClass) {
        if (aClass != Date.class) {
            throw new RuntimeException("你输入的不是日期,请选择别的转换器");
        }
        if (values == null || values.length == 0) {
            throw new IllegalArgumentException("没有数据");
        } else {
            String sDate = values[0];
            if (!sDate.trim().equals("")) {
                try {
                    return df.parse(sDate);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
            }
        }

        return null;
    }

    /**
     * 其他类型Date---->string
     *
     * @param map
     * @param o   对象
     * @return
     */
    @Override
    public String convertToString(Map map, Object o) {
        if (!(o instanceof Date)) {
            throw new RuntimeException("你的数据不是日期,请选择别的转换器");
        }
        Date date = (Date) o;
        return df.format(date);
    }
}

2、注册类型转换器
a、局部类型转换器:只为当前动作使用
1、动作类作为模型:在这里插入图片描述
2、动作类和模型分开:(经常用):
在模型所在的包中,建立以下配置文件(javabean的名称保持一致)在这里插入图片描述
b、全局类型转换器:所有动作使用
在构建路径顶端(src路径下),建立固定名称为xwork-conversion.properties的配置文件
内容为
java.util.Date=com.itheima.converter.MyDateConverter

二、类型转换失败后的提示
a、转换失败,会自动转到一个name=input的逻辑视图,一般指向输入的那个页面,目的回显(建议使用struts2的表单标签)
b、错误消息提示中文版本
前提:动作类继承ActionSupport才能使用

在自定义的类型转换器中,异常必须抛出不能捕获,converterError会处理该异常,然后转入名为input的逻辑试图
在Action所在地包中,创建ActionName.properties,在局部资源文件中配置提示信息 invalid.fieldvalue.属性名=错误信息
在input逻辑试图对应的jsp页面中,通过<s:fielderror/>输出类型转换信息。
如图
在这里插入图片描述
该功能是由一个叫做conversionError拦截器负责处理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值