|
author:http://blog.csdn.net/chenyun2000/archive/2004/10/25/150612.aspx
1、概述 l Velocity是一個(gè)簡(jiǎn)單而且更加輕量級(jí)的工具,但是它沒(méi)有達(dá)到FreeMarker能夠做的許多任務(wù),而且它的模板語(yǔ)言不是很強(qiáng)大 l 我們認(rèn)為對(duì)于大多數(shù)應(yīng)用程序,FreeMarker比Velocity工作更簡(jiǎn)單,因?yàn)椋?/span> Ø 使用Velocity,你需要尋找特定工具或各種工作環(huán)境來(lái)一次次的解決典型的模板創(chuàng)作任務(wù),結(jié)果會(huì)浪費(fèi)更多時(shí)間 Ø 工作環(huán)境經(jīng)常意味著在Velocity模板中直接使用Java對(duì)象的方法,這違反了簡(jiǎn)單、無(wú)編程HTML設(shè)計(jì)的觀念 Ø 或者將表示任務(wù)移到控制器代碼中,這違反了MVC模式 l 使用FreeMarker,可以以out-of-the-box(如何翻譯確切?)的方式實(shí)現(xiàn)Velocity所能做的 2、特性比較清單 下面是一個(gè)使用FreeMarker能夠?qū)崿F(xiàn),而Velocity不能實(shí)現(xiàn)的不太全面的特性清單: (1)數(shù)字和日期支持 l 可以對(duì)任何數(shù)字類(lèi)型進(jìn)行算術(shù)運(yùn)算和比較,包括精度類(lèi)型 l 可以比較和顯示(格式化)日期/時(shí)間值 (2)國(guó)際化 l 根據(jù)各種內(nèi)建和定制的數(shù)字格式,格式化本地敏感的數(shù)字 l 根據(jù)各種內(nèi)建和定制的日期格式,格式化本地敏感和時(shí)區(qū)敏感的日期 l 標(biāo)識(shí)(變量名)可以包含非英語(yǔ)字符,如重音字符、阿拉伯字符、中文字符等 (3)循環(huán)處理 l 可以跳出循環(huán) l 可以在循環(huán)外訪(fǎng)問(wèn)循環(huán)體內(nèi)的控制變量 l 可以測(cè)試是否達(dá)到最后一次循環(huán) (4)模板級(jí)別的數(shù)組處理 l 可以使用類(lèi)似[i]語(yǔ)法的索引方式訪(fǎng)問(wèn)數(shù)組元素 l 可以查詢(xún)數(shù)組長(zhǎng)度 (5)宏 l 宏可以有局部變量 l 可以遞歸調(diào)用宏,同樣可以在模板的后面定義要調(diào)用的宏 l 調(diào)用宏時(shí),可以按位置或名字的方式傳遞參數(shù) l 宏參數(shù)可以有缺省值,使得在調(diào)用時(shí)忽略參數(shù)也有效 l 調(diào)用的宏可以有嵌套的體內(nèi)容(<@myMacro>body</@myMacro>),能夠在宏被調(diào)用時(shí)進(jìn)行處理 l 宏是純變量的,可以基于表達(dá)式來(lái)執(zhí)行宏,或者作為參數(shù)傳遞給另一個(gè)宏 (6)命名空間 l 可以對(duì)變量使用多命名空間,這對(duì)創(chuàng)建宏庫(kù)很重要,因?yàn)檫@可以避免應(yīng)用程序中指定的變量和宏庫(kù)中變量的名字沖突 (7)使用內(nèi)建的函數(shù)/操作符維護(hù)Java無(wú)關(guān)的string、list和map l 可以將字符串轉(zhuǎn)換成大/小寫(xiě)、首字符大/小寫(xiě),對(duì)HTML、XML或RTF進(jìn)行轉(zhuǎn)義處理,substring、split、查詢(xún)字符串長(zhǎng)度、find/replace子串等等 l 通過(guò)索引訪(fǎng)問(wèn)list元素,獲得子list,合并list,查詢(xún)list長(zhǎng)度,對(duì)list排序 l 通過(guò)key變量訪(fǎng)問(wèn)map元素,檢查map是否為空,獲得key或值的list (8)揭示模板中的錯(cuò)誤 l 當(dāng)訪(fǎng)問(wèn)一個(gè)未定義的變量,FreeMarker不會(huì)沉默;你可以配置FreeMarker來(lái)停止render模板顯示錯(cuò)誤信息,或者跳過(guò)錯(cuò)誤部分;無(wú)論哪種,FreeMarker會(huì)記錄問(wèn)題(日志) l 在寫(xiě)錯(cuò)指令名時(shí),FreeMarker會(huì)拋出異常 (9)高級(jí)render控制 l 可以使用一組標(biāo)記來(lái)封裝模板的一塊區(qū)域,以便在塊區(qū)中所有要修改的地方應(yīng)用HTML或XML轉(zhuǎn)義(或其它使用FreeMarker表達(dá)式表示的轉(zhuǎn)換) l FreeMarker有轉(zhuǎn)換器,它們是模板的一塊區(qū)域,在render時(shí),通過(guò)轉(zhuǎn)換過(guò)濾;內(nèi)建的轉(zhuǎn)換器包括空白字符壓縮、HTML和XML轉(zhuǎn)義;你可以實(shí)現(xiàn)自己的轉(zhuǎn)換器;當(dāng)然轉(zhuǎn)換器可以嵌套 l 可以使用flush指令顯式的flush輸出 l 可以使用stop指令停止render (10)文字 l 除了通常的字符串、數(shù)字和布爾值文字,也可以在模板中定義list和map文字 l 支持所有的Java轉(zhuǎn)義文字:\b、\t、\n、\f、\r、\”、\’、\\,也支持\xXXXX使用UNICODE指定字符 (11)高級(jí)空白字符移除 l FreeMarker堅(jiān)持移除各行只包含不輸出FreeMarker標(biāo)記的空白字符 l 對(duì)于明顯要整修掉不需要的空白字符的指令來(lái)說(shuō),空白字符是個(gè)大問(wèn)題 (12)集成其它技術(shù) l 可以在模板中使用JSP標(biāo)記庫(kù) l 可以直接在Python工程中使用 (13)強(qiáng)大的XML轉(zhuǎn)換能力 l 在2.3版本中,FreeMarker具有強(qiáng)大的新XML轉(zhuǎn)換能力,使得替代XSLT成為可能 l Velocity在這方面是無(wú)法真正競(jìng)爭(zhēng)的,除非改進(jìn)核心引擎,如支持宏庫(kù)映射到名字空間,宏中支持局部變量 (14)高級(jí)模板元程序 l 可以捕獲輸出的任何部分到context變量中 l 可以解釋任何context變量,如果它是一個(gè)模板定義 l 上述兩者的結(jié)合使用 |
|
|
來(lái)自: web.anywhere > 《我的圖書(shū)館》