Struts2自定義類型轉換器

jopen 9年前發布 | 22K 次閱讀 Struts2 Web框架

Struts2自定義類型轉換器分為局部類型轉換器和全局類型轉換器

(1)局部類型轉換器

如果頁面傳來一個參數reg.action?birthday=2010-11-12到后臺action,然后屬性用date類型是可以接收到的,但是如果傳的是20101112這樣類型的字符串,用date類型是獲取不到,并且會出現錯誤的,struts2提供了一種類型轉換器供我們使用。

以下為局部類型轉換器的開發步驟

a.首先要寫一個類來繼承DefaultTypeConverter

b.然后覆蓋convertValue這個方法,在里面進行數據轉型

c.在action類所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是類名,后面的-conversion.properties是固定的寫法,

如:HelloWorldAction-conversion.properties

d.Properties文件里面的內容為:屬性名稱=類型轉換器的全類名(既包名.類名)

如:birthday=com.ljq.type.converter.DateTypeConverter

(2)全局類型轉換器

如果業務需求所有的日期都要轉換,則可以使用全局類型轉換器,只要在src根目錄下面放置xwork-conversion.properties文件,并且properties文件中的內容為:

待轉換的類型=類型轉換器的全類名

如:java.util.Date =com.type.Converter.DateTypeConverter 即可

DefaultTypeConverter

日期轉換器

    public class DateTypeConverter extendsDefaultTypeConverter {

      public Object convertValue(Map<String, Object> context, Object value,Class toType) {  
      SimpleDateFormat sdf = newSimpleDateFormat("yyyyMMdd HH:mm:ss");  
             try {  
                    if (toType == Date.class) {// 當字符串向Date類型轉換時  
                           //頁面傳遞過來的參數被封裝成了String[]  
                           String[] params =(String[]) value;  
                           returnsdf.parseObject(params[0]);  
                    } else if (toType ==String.class) { // 當Date轉換成字符串時  
                           Datedate=(Date)value;  
                           returnsdf.format(date);  
                    }  
             } catch (java.text.ParseExceptione) {  
                    e.printStackTrace();  
             }  
                    return null;  
             }  
}  </pre><br />

對象轉換器

    import ognl.DefaultTypeConverter;
public class UserConverter extends DefaultTypeConverter {

    @Override   
    public Object convertValue(Map context,Object value, Class toType) {   
         //從頁面轉到服務器 toType表示要轉化的類型,  
        if (toType==User.class) {   
            /*頁面傳遞過來的參數被封裝成了String[]*/   
            String[] params = (String[])value;   
            User user = new User();   
            /*取出user字符串,按,分割成數組*/   
            String[] uservalues =params[0].split(",");   
            user.setName(uservalues[0]);   
            user.setPass(uservalues[1]);   
            return user;   
        }   
        /*從服務器轉到頁面,顯示user參數值,則要轉換成字符串*/   
        else if (toType==String.class) {   
            User user =(User)value;   
            return "姓名:"+user.getName()+", 密碼:"+user.getPass();   
        }   
        return null;   
    }   
}    </pre><br />
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!