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