struts2自定义转换器

Posted 川哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2自定义转换器相关的知识,希望对你有一定的参考价值。

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器

(1)局部类型转换器 
如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用。

以下为局部类型转换器的开发步骤

a.首先要写一个类来继承StrutsTypeConverter

b.然后覆盖convertFromString(),convertToString()这个方法,在里面进行数据转型 

c.在action类所在的包下放置ConversionAction-conversion.properties文件,ConversionAction是类名,后面的-conversion.properties是固定的写法, 
如:ConversionAction-conversion.properties

d.Properties文件里面的内容为:属性名称=类型转换器的全类名(既包名.类名)

如:date=cn.happy.conversion.DateConversion

创建ConversionAction类

public class ConversionAction extends ActionSupport {
    private Date date;

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

编写自定义转换器代码

public class DateConversion extends StrutsTypeConverter {
    private static final List<SimpleDateFormat> list=new ArrayList<SimpleDateFormat>();
    static {
        list.add(new SimpleDateFormat("yyyy-MM-dd"));
        list.add(new SimpleDateFormat("yyyy年MM月dd日"));
        list.add(new SimpleDateFormat("yyyy/MM/dd"));
        list.add(new SimpleDateFormat("yyyy.MM.dd"));
    }
    public Object convertFromString(Map map, String[] strings, Class aClass) {
        //获取日期的字符串
        String date=strings[0];
        for(SimpleDateFormat item:list){
            try {
                //把String类型转为Date
                Date parse = item.parse(date);
                return parse;
            } catch (ParseException e) {
                continue;
            }
        }
        //如果遍历完毕后扔没有转换成功,表明出现转换异常
       throw new TypeConversionException();
    }

    public String convertToString(Map map, Object obj) {
        Date date=(Date)obj;
        //输出格式
        return new SimpleDateFormat("yyyy-MM-dd").format(date);
    }
}

jsp页面代码

 <form action="conversion" method="post">
        日期<input name="date">
        <input type="submit" value="提交">
    </form>

struts.xml配置

 <action name="conversion" class="cn.happy.action.ConversionAction" >
            <!--转换失败,进入login.jsp页面-->
            <result name="input">login.jsp</result>
            <result name="success">sucess.jsp</result>
        </action>

 

 

 

(2)全局类型转换器 
如果业务需求所有的日期都要转换,则可以使用全局类型转换器,只要在src根目录下面放置xwork-conversion.properties文件,并且properties文件中的内容为: 
待转换的类型=类型转换器的全类名 

java.util.Date=cn.happy.conversion.DateConversion

               

 


                       

以上是关于struts2自定义转换器的主要内容,如果未能解决你的问题,请参考以下文章

Struts2框架的自定义类型转换器

struts2---自定义类型转换器

struts2中的类型转换,自定义类型转换器需要继承啥类

struts2-12-用户自定义转换器(地址)

在代码片段中包含类型转换

单元测试 NPE,当我添加片段自定义转换时