close

  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 {
    @Override
    protected void initOther() throws ServletException {
        super.initOther();
        DateConverter d = new DateConverter(null);
        String[] datePattern = { "yyyy/MM/dd", "yyyy/mm/dd HH:mm:ss", "yyyy-MM-dd",  "yyyy.MM.dd" };
        d.setPatterns(datePattern);
        ConvertUtils.register(d, java.util.Date.class);
        ConvertUtils.register(d, String.class);
    }
}

  在原本的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。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jemmy 的頭像
    Jemmy

    Jemmy Walker

    Jemmy 發表在 痞客邦 留言(0) 人氣()