velocity & freemarker

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

1. 變量定義html

#set($name =「velocity」)

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

#set($hello =「hello $name」)

上面的這個等式將會給$hello 賦值爲「hello velocity」web

 ${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中大小寫敏感。session

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
 
2、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> 

輸出結果是:青年人 測試

缺點:
一、freemarker的變量必須有值,沒有被賦值的變量就會拋出異常,那個黃黃的freemarker出錯頁面,真是讓人看了太難過了。
二、freemarker的map限定key必須是string,其餘數據類型居然沒法操做
三、freemarker爲了編程方便把不可序列化的東西往session裏面放! 
相關文章
相關標籤/搜索