Date型態是自有程式設計以來,必須又難以通透到每個程式裡的資料型態,不僅具字串與數值特徵,其Format更因地而異,Locale觀念就包括了日期如何顯示。而往往遷就於前端面頁並不真的認識Date,就把Value Object的日期型態改為String,也造成前端到middle tier需要一個VO,而middle tier到後端又是另一個VO。
在Struts1,要把JSP的日期欄位post到後端時變成Date型態,需繼承ActionServlet覆寫initOther method,如下:
public class ActionServlet extends org.apache.struts.action.ActionServlet { |
在原本的ActionServlet的initOther method裡,ConvertUtils已註冊一堆基本型態,如數值。是故在繼承它之後,先執行super.initOther(),再把DateConverter註冊到ConvertUtils。ConvertUtils遇到Date和String這兩個class,都交給DateConverter去轉換,其中String class不止被DateConverter檢查再轉換,像數值類別也是,可參考ActionServlet的原始碼。
之後在web.xml的<servlet>標籤找到<servlet-class>裡的org.apache.struts.action.ActionServlet,替換成你所繼承的class full name。