Struts對於用戶提交的很多格式都進行了轉換,比如Date類型,如果用戶輸入2012-12-12這種格式,那麼Struts2內部的轉換器就會自動的轉化成對應Date類型輸出,但是如果輸入是20121212這種格式或則其他的類型,那麼就需要自己定義一個類型轉換器了,下面來介紹一下,首先,Struts2的類型轉換器一共有兩種,一個是針對某一個具體的Action的局部類型轉換器,另一個是針對整個項目而言的全局轉換器,先來說說局部類型轉換器,首先需要寫一個類繼承DefaultTypeConverter
代碼如下
- package com.bird.type.converter;
-
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Map;
-
- import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
-
- public class DateTypeConverter extends DefaultTypeConverter {
-
- @Override
- public Object convertValue(Map<String, Object> context, Object value,@SuppressWarnings("rawtypes") Class toType) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
-
- if(toType == Date.class){
- String[] params = (String[]) value;
- try {
- return dateFormat.parse(params[0]);
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }else if(toType == String.class){
- Date date = (Date) value;
- return dateFormat.format(date);
- }
- return null;
-
- }
-
-
- }
toType代表要轉換成什麼類型,這裡可以實現雙向轉換,而且Struts由於要兼容表單裡面的復選框,所以參數帶過來的就會是一個String數組,帶一個參數的直接使用數組0就可以了。
先看一下Action代碼
- package com.bird.action;
-
- import java.util.Date;
-
- public class HelloWorld {
- private Date birthday;
-
- public Date getBirthday() {
- return birthday;
- }
-
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
-
- public String execute(){
-
- return "success";
- }
-
- public String addUI(){
-
- return "success";
- }
-
- }
然後下面的工作就是注冊這個轉換器,對於局部轉換器,需要構建一個名稱為HelloWorld-conversion.properties,其中HelloWorld為Action的簡單名稱,後面的conversion是指定的必須,這個配置文件內容如下
[java]
- birthday=com.bird.type.converter.DateTypeConverter
這樣一個局部類型轉換器就算是完成了
下面說一下全局類型轉換器,它和局部類型轉換器唯一的不同就是配置文件的不同,這個配置文件需要放在WEB-INF下面的classes文件下面,對於eclipse,就是放在src文件目錄下面就行了。配置文件的名稱為xwork-conversion.properties,這個名稱是不能修改的,然後內部內容為
- java.util.Date=com.bird.type.converter.DateTypeConverter
這樣就對整個的項目,所有的Date類型進行轉換