如何在Velocity模版中使用static類

          Posted on 2007-05-17 14:52 bluoy 閱讀(2457) 評論(0)  編輯  收藏
          開發要求:
          為了便于維護,頁面端js中的錯誤信息要求不能硬編碼,要根據java端定義的Message對應的常量Key動態獲得。

          按照velocity常規做法,無法用VTL語言使用static類。調查了一下,原來velocity還是提供了變通了的實現方案的,官方論壇上還有就這一問題的爭論--“Add Support for Static Utility Classes”。

           
          基本上集中于兩種思路:static class wrapper 和 put class into context。
          前者就是作一個static class 的托管類,將托管類的實例放到context中。
          1.3.1版中對應實現為org.apache.velocity.app.FieldMethodizer。
          后者的想法是先把static類的Class放到context中,然后模版引擎在碰到Class對象時,優先在java.lang.Class中尋找對應的調用,然后再查找static class的調用。個人感覺這種思路比較好,用戶使用比較簡單直接,不需要額外的wrapper類。但官方好像更鐘情于前者。計劃在未來的1.6版中提供支持。

          附帶遇到的其他限制:
          1. velocity 1.3.1版不能正常處理jdk1.5中的可變參數(Varargs) 特性。可變參數(Varargs) 其實使用對應類型的數組來實現的。velocity會因為匹配不到對應的函數原型而調用失敗。其他版本未作驗證。
          2. velocity 1.3.1版不能正常處理jdk1.5中的enum特性。因為enum其實是按類來對待的。而velocity內部對類的處理是“取得所有的public的Methods”。所以類內部定義的enum類型的常量無法取到。這個處理請參見:org.apache.velocity.util.introspection.ClassMap。
          3. velocity只能調用類/對象的methods, 無法直接使用public的attributs。原因如2。同時可以參照
          Access to public member variable of a class


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 湟中县| 常德市| 临桂县| 呼伦贝尔市| 鹿邑县| 漾濞| 会东县| 思茅市| 太仆寺旗| 资溪县| 文昌市| 彭阳县| 阿克陶县| 商南县| 富平县| 三穗县| 资源县| 英山县| 乌拉特中旗| 中阳县| 盐池县| 莱芜市| 洪洞县| 乐昌市| 金乡县| 达拉特旗| 观塘区| 永安市| 宾川县| 河北省| 洛阳市| 得荣县| 巴里| 临沂市| 天峻县| 基隆市| 西乌珠穆沁旗| 那坡县| 德江县| 萨迦县| 镇安县|