Velocity是一個基於java的模板引擎(template engine)。它容許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象,這樣的話其實在先後端分離而言又是一個較爲合理的可選方案,
Velocity也能夠配合其餘的語言來完成使用,Velocity.js就是不錯的選擇,這樣的話能夠依靠nodejs和瀏覽器環境來實現模版的功能。html
什麼是Velocity模版?java
Velocity模版能夠是任意的文本文件,只要裏面包含專門的模板語言(VTL)標記,就能夠被Velocity模板引擎解析;
Velocity模版的工做機制:node
Velocity能夠經過獲取Java對象的函數返回值、屬性值,用於替換模板文件中的VTL變量標記,從而生成新的文件,模板文件的擴展名能夠是".vm"、".htm"、".html"、".asp"、".sql",等等任
大部分的模版引擎都是有本身的書寫方式,不過{}這個大括號基本都是他們的通用符號,這裏介紹語法的順序是:sql
變量定義、使用後端
控制語句 if for之類數組
指令瀏覽器
宏前後端分離
變量是任何語言都不可缺乏的;函數
變量的定義和賦值基本方法:#set (<$變量名> = <"變量值">)
#set ($name = "Sankhya") ##字符串
#set ($age = 30) ##數字
#set ($list = ["Sankara", ${name}, "Shankara"]) ##數組
#set ($dict = ["A":"va", "B":234, "C":${value}]) ##HashTable
在雙引號之間的字符串將被Velocity引擎解釋和從新解釋;在velocity中使用$2.5這樣的貨幣標識是沒有問題得的,由於velocity中的變量老是以一個大寫或者小寫的字母開始的。.net
使用:
${name} ,也能夠寫成:$name。提倡用前面的寫法。
例如:你但願經過一個變量$vice來動態的組織一個字符串。
Jack is a $vicemaniac.
原本變量是$vice如今卻變成了$vicemaniac,這樣Veloctiy就不知道您到底要什麼了。因此,應該使用規範的格式書寫 : Jack is a ${vice}maniac
如今Velocity知道變量是$vice而不是$vicemaniac。
例如:
#set ($desc = "${name} is ${age} years old;")
執行這條語句以後,輸出$desc的值將是:Sankhya is 30 years old;
同時還須要注意:
(1).Velocity模版中的變量是弱類型的;等號"="右邊的值能夠是引用、字符串、數字、Array、Vector、HashTable或表達式;
(2).若是等號"="右邊的值是null,則左邊的變量不會被賦值,且仍然保留之前的值;
(3).模板中沒有被定義的變量將被認爲是一個字符串;
(4).模板引擎不會將reference解釋爲對象的實例變量;如:$foo.Name將被解釋爲對象Foo的getName()方法,而不是Foo對象的Name實例變量;$foo.getBar()就等價於$foo.Bar;
註釋:
單行註釋使用「##」開頭就可: ## 這好似註釋
多行註釋 #* 多行註釋 *#
文檔註釋: #** 文檔編寫 **#
#if (<condition>) ##statement segment #elseif (<condition>) ##statement segment #else ##statement segment #end
做爲condition,Velocity引擎也支持關係運算符(>、>=、<、<=、!=)和邏輯運算符(&&->AND、||->OR、!->NOT);
"!"用來強制把不存在的變量顯示爲空白。
如當頁面中包含$msg,若是msg對象有值,將顯示msg的值,若是不存在msg對象同,則在頁面中將顯示$msg字符。這是咱們不但願的,爲了把不存 在的變量或變量值爲null的對象顯示爲空白,則只須要在變量名前加一個「!」號便可。
如:$!msg
#foreach ($element in $list) ##your statement $velocityCount #end
#parse和#include指令:
這二者都是導入本地模板文件;
#parse指令只能導入一個文件,同時,被導入的文件的內容將會被Velocity模板引擎解析,意思就是把被導入的文件的內容copy到當前文件中;該指令也能夠被遞歸調用;
#include指令能夠導入一個或多個文件,當導入多個文件時,能夠用逗號分隔;並且,被導入的文件的內容不會被Velocity模版引擎解析;
例如:
#include ("one.gif", "two.txt", "three.htm") ##不會被模版引擎解釋;
#include (${file1}, ${file2}, ${file3}) ##不會被模版引擎解釋;
#parse ("server.conf") ##會被模版引擎解釋;
#stop中止執行模板引擎並返回,把它應用於debug是頗有幫助的;
Velocity中的轉義字符也是使用符號"";這就意味着執行"\"將會輸出"",而執行"$"將會輸出"$",執行"#"會輸出"#";
參考:http://bdxnote.blog.163.com/b...
http://www.blogjava.net/alexw...
http://www.cnblogs.com/likwo/...