Struts2之局部與全局類型轉換器

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

定義一個測試類

    package struts2.example.action;

import java.util.Date;  

public class HelloWorldAction {  

    private Date birthday;  

    public Date getBirthday() {  
        return birthday;  
    }  

    public void setBirthday(Date birthday) {  
        System.out.print(birthday);  
        this.birthday = birthday;  
    }  

    public String execute() throws Exception{  
        return "success";  
    }  
}  </pre><br />

在struts.xml文件里定義

<action name="list_*" class="struts2.example.action.HelloWorldAction" method="{1}">
   <!-- 定義處理結果與視圖資源之間的關系 -->
   <result name="success">/index.jsp</result>
</action>
運行時在網址輸入http://localhost:端口號/工程名/..(命名空間).. /list_execute.action?birthday=20121181即可完成跳轉,在index.jsp通過el表達式 ${birthday }輸出相應的birthday的值,輸出的是帶星期等其他信息的數據,不是原來的字符串。應用類型轉換器能夠實現數據的雙向轉換。

類型轉換器分為兩種
 局部類型轉換器:對某個action起作用
 全局類型轉換器:對所有的action起作用

所謂類型轉換器就是繼承一個類DefaultTypeConverter,然后重寫方法實現。應用類型轉換器會有兩種情況:
1、由請求參數的值轉換成屬性的值
2、使用struts2的標簽,進行數據回顯

    package struts2.example.type.converter;  

    import java.sql.Date;  
    import java.text.ParseException;  
    import java.text.SimpleDateFormat;  
    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,  
                Class toType) {  
            // TODO Auto-generated method stub  
            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyNNdd");  
            try{  
                if(toType==Date.class){//將String類型轉換成Date類型  
                    String[] params=(String[]) value;  
                    return simpleDateFormat.parse(params[0]);  
                }else if(toType==String.class){//將Date類型轉換成String類型  
                    Date date=(Date) value;  
                    return simpleDateFormat.format(date);  
                }  
            }catch(ParseException e){  

            }  
            return null;  
        }  
    }  

與Struts1一樣,在Struts2中也需要注冊。注冊局部類型轉換器
在action類所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是
Action的類名,后面的-conversion.properties是固定寫法,對于本例而言,文件的名稱應
為HelloWorldAction.properties。

在properties文件中的內容為:屬性名稱=類型轉換器的全類名
對于本例而言,HelloWorldAction-conversion.properties文件中的內容為:
birthday=struts2.example.type.converter.DateTypeConverter

自定義全局類型轉換器:在WEB-INF/classes下放置xwork-conversion.properties文件,在properties文件中
的內容為:待轉換的類型=類型轉換器的全類名
對本例而言,xwork-conversion.properties文件中的內容為:
java.util.Date=struts2.example.type.converter.DateTypeConverter
另外,使用全局類型轉換器要注意輸入的數據格式符號要求。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!