如何在Velocity模版中使用static類

          Posted on 2007-05-17 14:52 bluoy 閱讀(2457) 評(píng)論(0)  編輯  收藏
          開(kāi)發(fā)要求:
          為了便于維護(hù),頁(yè)面端js中的錯(cuò)誤信息要求不能硬編碼,要根據(jù)java端定義的Message對(duì)應(yīng)的常量Key動(dòng)態(tài)獲得。

          按照velocity常規(guī)做法,無(wú)法用VTL語(yǔ)言使用static類。調(diào)查了一下,原來(lái)velocity還是提供了變通了的實(shí)現(xiàn)方案的,官方論壇上還有就這一問(wèn)題的爭(zhēng)論--“Add Support for Static Utility Classes”。

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

          附帶遇到的其他限制:
          1. velocity 1.3.1版不能正常處理jdk1.5中的可變參數(shù)(Varargs) 特性。可變參數(shù)(Varargs) 其實(shí)使用對(duì)應(yīng)類型的數(shù)組來(lái)實(shí)現(xiàn)的。velocity會(huì)因?yàn)槠ヅ洳坏綄?duì)應(yīng)的函數(shù)原型而調(diào)用失敗。其他版本未作驗(yàn)證。
          2. velocity 1.3.1版不能正常處理jdk1.5中的enum特性。因?yàn)閑num其實(shí)是按類來(lái)對(duì)待的。而velocity內(nèi)部對(duì)類的處理是“取得所有的public的Methods”。所以類內(nèi)部定義的enum類型的常量無(wú)法取到。這個(gè)處理請(qǐng)參見(jiàn):org.apache.velocity.util.introspection.ClassMap。
          3. velocity只能調(diào)用類/對(duì)象的methods, 無(wú)法直接使用public的attributs。原因如2。同時(shí)可以參照
          Access to public member variable of a class


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 灵石县| 湖南省| 磐安县| 陕西省| 淳安县| 同心县| 伊川县| 衡山县| 鄂尔多斯市| 洮南市| 独山县| 志丹县| 收藏| 廊坊市| 双鸭山市| 利津县| 都江堰市| 广安市| 夹江县| 莱州市| 梨树县| 泗洪县| 东宁县| 新绛县| 广南县| 莆田市| 都昌县| 高阳县| 惠州市| 齐齐哈尔市| 深泽县| 文昌市| 滦平县| 应城市| 屏东县| 巴东县| 凯里市| 佛坪县| 高雄市| 奉化市| 肇州县|