velocity & freemarker


一、Velocity
Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅使用簡單的模板語言(template language)來引用由java代碼定義的對象。
當Velocity應用於web開發時,界面設計人員可以和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。

1. 變量定義

#set($name =“velocity”)

等號后面的字符串 Velocity 引擎將重新解析,例如出現以$開始的字符串時,將做變量的替換。

#set($hello =“hello $name”)

上面的這個等式將會給$hello 賦值為“hello velocity”

 ${name} ,也可以寫成:$name。提倡用前面的寫法。應該使用規范的格式書寫 : Jack is a ${vice}maniac
 
2. 循環
#foreach($element in $list)
 This is $element
 $velocityCount
#end

Velocity 引擎會將 list 中的值循環賦給 element 變量,同時會創建一個$velocityCount 的變量作為計數,從 1 開始,每次循環都會加 1.

#foreach ( $key in $list.keySet())
Key: $key -> Value: $list.get($key) <br>
#end

提示:velocity中大小寫敏感。

3. 判斷
#if(condition)
...
#elseif(condition)
…
#else
…
#end
4.注釋
單行注釋:## This is a single line comment.
多行注釋:#*
5.Velocity 也具有邏輯AND, OR 和 NOT 操作符。
#if($foo && $bar)
#end

6.轉義字符'\' 使用:如果reference被定義,兩個’\’意味着輸出一個’\’,如果未被定義,剛按原樣輸出。

7.Velocity內置了一些對象,在vm模版里可以直接調用,列舉如下:$request、$response、$session
 
二、Freemarker
FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或 HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成XML,JSP或Java 等。
 <html>  
     <head>  
         <title>freemarker測試</title>  
     </head>  
    <body>  
         <h1>${message},${name}</h1>  
    </body>  
</html> 
FreeMarker的模板文件並不比HTML頁面復雜多少,FreeMarker模板文件主要由如下4個部分組成: 
1,文本:直接輸出的部分 
2,注釋:<#-- ... -->格式部分,不會輸出 
3,插值:即${...}或#{...}格式的部分,將使用數據模型中的部分替代輸出 
4,FTL指令:FreeMarker指定,和HTML標記類似,名字前加#予以區分,不會輸出 
下面是一個FreeMarker模板的例子,包含了以上所說的4個部分 
<html>
<head> 
    <title>Welcome!</title>
</head>
<body> 
    <#-- 注釋部分 -->
    <#-- 下面使用插值 --> 
    <h1>Welcome ${user} !</h1> 
    <p>We have these animals: 
    <u1> 
    <#-- 使用FTL指令 --> 
    <#list animals as being>
        <li>${being.name} for ${being.price} Euros<
    <#list>
    <u1>
</body>
</html> 
1. FTL指令規則 
在FreeMarker中,使用FTL標簽來使用指令,FreeMarker有3種FTL標簽,這和HTML標簽是完全類似的. 
1,開始標簽:<#directivename parameter> 
2,結束標簽:</#directivename> 
3,空標簽:<#directivename parameter/> 
 
<#assign age=23> 
<#if (age>60)>老年人 
<#elseif (age>40)>中年人 
<#elseif (age>20)>青年人 
<#else> 少年人 
</#if> 

輸出結果是:青年人 

缺點:
1、freemarker的變量必須有值,沒有被賦值的變量就會拋出異常,那個黃黃的freemarker出錯頁面,真是讓人看了太難過了。
2、freemarker的map限定key必須是string,其他數據類型竟然無法操作
3、freemarker為了編程方便把不可序列化的東西往session里面放! 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM