歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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類型進行轉換

Copyright © Linux教程網 All Rights Reserved