自定义Struts2类型转换器


一、自定义类型转换器

创建一个类继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter或继承该类的子类org.apache.struts2.util.StrutsTypeConverter

  1. public class DateConversion extends StrutsTypeConverter {  
  2.   
  3.     @Override  
  4.     public Object convertFromString(Map context, String[] values, Class toClass) {  
  5.         // TODO Auto-generated method stub   
  6.         SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");  
  7.         if(toClass==Date.class){  
  8.             try {  
  9.                 return sf.parse(values[0]);  
  10.             } catch (ParseException e) {  
  11.                 // TODO Auto-generated catch block   
  12.                 e.printStackTrace();  
  13.             }  
  14.         }else if(toClass==String.class){  
  15.             return sf.format(values[0]);  
  16.         }  
  17.         return null;  
  18.     }  
  19.   
  20.     @Override  
  21.     public String convertToString(Map context, Object o) {  
  22.         // TODO Auto-generated method stub   
  23.         return null;  
  24.     }  
  25. }  
1、将上面的类型转换器注册为局部类型转换器:

在Action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是Action的类名,后面的-conversion.properties是固定写法,PersonAction-conversion.properties:

属性名=类型转换器全类名

  1. # syntax: <propertyName> = <converterClassName>  
  2. birthday=org.han.util.DateConversion  

或者封装对象:

  1. public class PersonConversion extends StrutsTypeConverter {  
  2.   
  3.     @Override  
  4.     public Object convertFromString(Map context, String[] values, Class toClass) {  
  5.         SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");  
  6.         Person per = new Person();  
  7.         per.setName(values[0]);  
  8.         try {  
  9.             per.setBirthday(sf.parse(values[1]));  
  10.         } catch (ParseException e) {  
  11.             // TODO Auto-generated catch block   
  12.             e.printStackTrace();  
  13.         }  
  14.         return per;  
  15.     }  
  16.   
  17.     @Override  
  18.     public String convertToString(Map context, Object o) {  
  19.         // TODO Auto-generated method stub   
  20.         return null;  
  21.     }  
  22. }  
action:
  1. @Namespace("/")  
  2. public class PersonAction extends ActionSupport{  
  3.     private Person per;  
  4.     public Person getPer() {  
  5.         return per;  
  6.     }  
  7.   
  8.     public void setPer(Person per) {  
  9.         this.per = per;  
  10.     }  
  11.   
  12.     @Action(value="person",results={@Result(name="success",location="/index.jsp")})  
  13.     public String execute() throws Exception {  
  14.         // TODO Auto-generated method stub   
  15.         System.out.println(per.getBirthday());  
  16.           
  17.         return SUCCESS;  
  18.     }  
  19.    
  20. }  
jsp:
  1. <body>  
  2.   <form action="person.action" method="post">  
  3.     <input type="text" name="per" />  
  4.     <input type="text" name="per" />  
  5.     <input type="submit" value="提交"/>  
  6.   </form>  
  7. </body>  
  1. per=org.han.util.PersonConversion  

2、将上面的类型转换器注册为全局类型转换器:
在src下放置xwork-conversion.properties文件,该文件内容为:

待转换的类型全类名=类型转换器全类名

  1. java.util.Date=org.han.util.DateConversion  

相关内容