Struts2自定义类型转换器


Struts对于用户提交的很多格式都进行了转换,比如Date类型,如果用户输入2012-12-12这种格式,那么Struts2内部的转换器就会自动的转化成对应Date类型输出,但是如果输入是20121212这种格式或则其他的类型,那么就需要自己定义一个类型转换器了,下面来介绍一下,首先,Struts2的类型转换器一共有两种,一个是针对某一个具体的Action的局部类型转换器,另一个是针对整个项目而言的全局转换器,先来说说局部类型转换器,首先需要写一个类继承DefaultTypeConverter

代码如下

  1. package com.bird.type.converter;  
  2.   
  3. import java.text.ParseException;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.Date;  
  6. import java.util.Map;  
  7.   
  8. import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;  
  9.   
  10. public class DateTypeConverter extends DefaultTypeConverter {  
  11.   
  12.     @Override  
  13.     public Object convertValue(Map<String, Object> context, Object value,@SuppressWarnings("rawtypes") Class toType) {  
  14.         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");  
  15.           
  16.         if(toType == Date.class){  
  17.             String[] params = (String[]) value;  
  18.                 try {  
  19.                     return dateFormat.parse(params[0]);  
  20.                 } catch (ParseException e) {  
  21.                     // TODO Auto-generated catch block   
  22.                     e.printStackTrace();  
  23.                 }  
  24.             }else if(toType == String.class){  
  25.                 Date date = (Date) value;  
  26.                 return dateFormat.format(date);  
  27.             }  
  28.         return null;   
  29.           
  30.     }  
  31.       
  32.       
  33. }  

toType代表要转换成什么类型,这里可以实现双向转换,而且Struts由于要兼容表单里面的复选框,所以参数带过来的就会是一个String数组,带一个参数的直接使用数组0就可以了。

先看一下Action代码

  1. package com.bird.action;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class HelloWorld {  
  6.     private Date birthday;  
  7.   
  8.     public Date getBirthday() {  
  9.         return birthday;  
  10.     }  
  11.   
  12.     public void setBirthday(Date birthday) {  
  13.         this.birthday = birthday;  
  14.     }  
  15.   
  16.     public String execute(){  
  17.       
  18.         return "success";  
  19.     }  
  20.       
  21.     public String addUI(){  
  22.       
  23.         return "success";  
  24.     }     
  25.       
  26. }  

然后下面的工作就是注册这个转换器,对于局部转换器,需要构建一个名称为HelloWorld-conversion.properties,其中HelloWorld为Action的简单名称,后面的conversion是指定的必须,这个配置文件内容如下

[java]
  1. birthday=com.bird.type.converter.DateTypeConverter  

这样一个局部类型转换器就算是完成了

下面说一下全局类型转换器,它和局部类型转换器唯一的不同就是配置文件的不同,这个配置文件需要放在WEB-INF下面的classes文件下面,对于eclipse,就是放在src文件目录下面就行了。配置文件的名称为xwork-conversion.properties,这个名称是不能修改的,然后内部内容为

  1. java.util.Date=com.bird.type.converter.DateTypeConverter  

这样就对整个的项目,所有的Date类型进行转换

相关内容