Posted on 2007-05-17 14:52
bluoy 閱讀(2450)
評(píng)論(0) 編輯 收藏
開發(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)參見: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