Struts2第五篇【类型转换器、全局、局部类型转换器】

前言

上篇博文已经讲解了,Struts2为咱们实现了数据自动封装…由上篇的例子咱们能够看出,表单提交过去的数据全都是String类型的,可是通过Struts自动封装,就改为是JavaBean对应成员变量的类型了。java

可是呢,日期类型只支持是yyyy-MM-dd这种格式的,由于咱们在上个例子中直接使用的是Struts支持的格式,所以没有报错…本篇博文就是讲解Struts如何对日期类型的格式更好地支持markdown

日期转换问题

当咱们使用的是yyyyMMdd这种格式的时候,咱们看看Struts的自动封装能不能解析出相对应的日期app

这里写图片描述

直接抛出了异常jsp

这里写图片描述

这里写图片描述

分析

那么,咱们怎么让Struts可以支持更多的日期格式呢??好比,我想Struts在自动封装数据的时候支持yyyyMMdd,yyyy年MM月dd日这样的日期格式…..ide

Struts提供了转换器给咱们使用,也就是,咱们能够自定义转换器,咱们定义了什么格式,Struts就能够根据对应的格式进行自动封装spa

当咱们写完自定义转换器,是须要向Struts说明咱们写了,否则的话,Struts是不知道咱们自定义了转换器类的…code

也就是说,咱们要想实现类型转换,须要两步orm

  • 编写自定义转换器类
  • 告诉Struts咱们写了转换器类

自定义转换器类

通常地,咱们想要编写自定义转换器类,都是实现StrutsTypeConverter类的….xml

/** * Created by ozc on 2017/5/1. * 自定义异常转换器类 * * 咱们要实现的就是:在Struts转换的时候, * */
public class MyConvter extends StrutsTypeConverter {


    //需求,当Struts自动封装数据时,也支持yyyyMMdd,yyyy年MM月dd日等格式的支持\
    SimpleDateFormat[] format = {new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyyMMdd"), new SimpleDateFormat("yyyy年MM月dd日")};



    /** * 把String转换为指定的类型 【String To Date】 * * * @param map * 当前上下文环境 * @param strings * jsp表单提交的字符串的值 * @param aClass * 要转换为的目标类型 */
    @Override
    public Object convertFromString(Map map, String[] strings, Class aClass) {

        //判断是否有值
        if (strings == null) {
            return null;
        }
        //判断是不是日期类型的
        if (Date.class != aClass) {
            return null;
        }

        //遍历循环
        for (SimpleDateFormat dateFormat : format) {
            try {

                //解析传递进来的第一个就行啦
                dateFormat.parse(strings[0]);
            } catch (ParseException e) {
                //若是格式不对,那么就跳出当前的循环
                continue;
            }
        }
        return null;
    }
    @Override
    public String convertToString(Map map, Object o) {
        return null;
    }
}

告诉Struts,我写了转换器类

告诉Struts我写了一个转换器类,也分两种方式图片

  • 定义了局部转换器类,就当前包下的Action类有效
  • 定义了全局转换器类,整个项目有效

全局转换器

步骤:

  • 在src目录下建立一个名为xwork-conversion.properties的文件
  • 配置文件的内容:须要转换的类类型=转换器类的全名java.util.Date=qwer.MyConvter

局部转换器类

步骤:

  • 在当前的Action包下建立名为Action名-conversion.properties的文件
  • 文件的内容为:须要转换的字段【若是是JavaBean里的字段,须要写上JavaBean的】=转换器类的全名user.birthday=qwer.MyConvter

效果

这里写图片描述这里写图片描述


错误提示页面

当发生了日期转换的异常时,Struts给出的页面是这样子的:

这里写图片描述

这个咱们称之为input视图,咱们要作的就是给出用户更友好的提示,因而在struts.xml文件中配置:若是返回的是input视图,那么跳转到咱们相对应的页面上

<result name="input">/error.jsp</result>

这里写图片描述

相关文章
相关标签/搜索