TTP 協議中傳遞的任何內容都是String類型的,所以一旦我們在服務器上需要一個非String類型的對象,例如:int或者Date,那麼我們就需要在收 到 HTTP請求的數據的時候,首先將String類型的數據變換爲我們需要的對應類型的數據,之後再使用。這個過程就是類型轉換
類型轉換在Struts2中是透明的,即Struts2內置了類型轉換機制。
一、概述
在B/S應用中,將字符串請求參數轉換爲相應的數據類型,是MVC框架提供的功能,而Struts2是很好的MVC框架實現者,理所當然,提供了類型轉換機制。
Struts2的類型轉換是基於OGNL表達式的,只要我們把HTML輸入項(表單元素和其他GET/POET的參數)命名爲合法的OGNL表達式,就可以充分利用Struts2的轉換機制。
除此之外,Struts2提供了很好的擴展性,開發者可以非常簡單的開發自己的類型轉換器,完成字符串和自定義複合類型之間的轉換。總 之,Struts2的類型轉換器提供了非常強大的表現層數據處理機制,開發者可以利用Struts2的類型轉換機制來完成任意的類型轉換。
二.常規類型的轉換:
比如表單提交的信息有 用戶名,生日, 年齡, Action中對應的數據類型分別是 String, Date, int.沒什麼好說的, Struts2會自動完成.
Struts2內建了常用的類型轉換器,如String ,boolean,char,int,long,float,double,Date, 數組(假定元素是String類型), 集合(假定元素是String類型,用ArrayList封裝)
實現自定義類型轉換器
實現TypeCoverter接口,或者繼承DefaultTypeConverter實現類(該類實現了TypeCoverter接口),通過繼承該實現類來實現自己的類型轉換器。重寫convertValue方法即可。
爲了簡化類型轉換器的實現,Struts2提供了一個StrutsTypeConverter抽象類,這個抽象類是DefaultConverter的子類。實現了方法,並提供了2個不同轉換方向的方法:Object
convertToString(Map context,String[] values,Class toClass)和String convertFromString(Map context,Object o)。
三、註冊應用
實現了自定義類型轉換器之後,將該類型轉換器註冊在Web應用中,Struts2框架纔可以正常使用該類型轉換器。
關於類型轉換器的註冊方式,主要有3中:
A、註冊局部類型轉換器:僅僅對某個Action的屬性起作用。
B、註冊全局類型轉換器:對所有Action的特定類型的屬性都會生效。
1、局部類型轉換器
提供如下格式的文件
文件名: ActionName-conversion.properties
內容:多個propertyName(屬性名)=類型轉換器類(含包名),如 date=com.aumy.DateConverter
存放位置:和ActionName類相同路徑。
2、全局類型轉換器
提供如下格式的文件
文件名: xwork-conversion.properties
內容: 多個“複合類型=對應類型轉換器”項組成,如 java.Util.Date=com.aumy.DateConverter
存放位置:WEB-INF/classes/目錄下。
四、應用示例
由於Struts2對日期轉換顯示時,會顯示日期和時間,現在項目只需要顯示日期,所以採用自定義的類型轉換器來實現日期顯示。
2. 具體註冊應用
局部配置:
ActionName-conversion.properties配置文件
view sourceprint?1 java.util.Date=xxx.xxx.xxxx.DateTypeConverter
全局配置:
xwork-conversion.properties配置文件
view sourceprint?1 java.util.Date=xxx.xxx.xxxx.DateTypeConverter