基本語法
在 hellovelocity.vm 里面可以看到很多以 # 和$符開頭的內容,這些都是 Velocity 的語法,在 Velocity 中所有的關鍵字都是以 # 開頭的,而所有的變量則是以$開頭。
一、變量
變量定義
#set($name="velocity")
等號后面的字符串 Velocity 引擎將重新解析,例如出現以$開始的字符串時,將做變量的替換。以 "$" 開頭,第一個字符必須為字母
變量可以包含的字符有以下內容:
-
alphabetic (a .. z, A .. Z)
-
numeric (0 .. 9)
-
hyphen ("-")
-
underscore ("_")
變量使用
${name}
或
$name
在模板文件中使用$name 或者${name} 來使用定義的變量。推薦使用${name} 這種格式,因為在模板中同時可能定義了類似$name 和$names 的兩個變量,如果不選用大括號的話,引擎就沒有辦法正確
識別$names 這個變量。
對於一個復雜對象類型的變量,例如$person,可以使用${person.name} 來訪問 person 的 name 屬性。值得注意的是,這里的${person.name} 並不是直接訪問 person 的 name 屬性,而是訪問 person 的
getName() 方法,所以${person.name} 和${person.getName()} 是一樣的,即${person.name}=${person.getName()}【1】
變量賦值
在第一小點中,定義了一個變量,同時給這個變量賦了值。對於 Velocity 來說,變量是弱數據類型的,可以在賦了一個 String 給變量之后再賦一個數字或者數組給它。可以將以下六種數據類型賦給一
個 Velocity 變量:變量引用, 字面字符串, 屬性引用, 方法引用, 字面數字, 數組列表。
-
#set($foo = $bar)
-
#set($foo =“hello”)
-
#set($foo.name = $bar.name)
-
#set($foo.name = $bar.getName($arg))
-
#set($foo = 123)
-
#set($foo = [“foo”,$bar])
注意
1、右值是null, 則左值不會被賦值,也就是說會保留以前的值。
#set( $monkey = "monica" ) #set( $monkey = $monkey_a ) $monkey
結果輸出:monica,因為右邊的$monkey_a並沒有定義過
2、velocity模板中不會將reference解釋為對象的實例變量,詳情見上方【1】
3、變量的作用域 是從上而下往后的都會有
A $monkey <div class="list"> <div class="item"> <div class="inner-title”> #set( $monkey = “jerry" ) <span class="color_bg point"></span>保障額度高 B $monkey </div> <div class="inner-list"> <p>年度基礎免賠額:<span class="color bold">1萬元</span> </p> </div> C $monkey </div> <div class="item"> D $monkey <div class="inner-title"> <span class="color_bg point"></span>住院醫療金 </div> <div class="inner-list"> <p>重症監護費用:不設單項最高年限額</p> </div> </div> E $monkey </div> // 以上ABCDE的輸出結果是 // 輸出結果: 除了A是字符串顯示$monkey , 其余的都是:jerry
二、循環
#foreach($element in $list) This is $element $velocityCount #end
Velocity 引擎會將 list 中的值循環賦給 element 變量,同時會創建一個$velocityCount 的變量作為計數,從 1 開始,每次循環都會加 1.
#foreach循環得到的是值,和es6中的for...of相似
velocityCount變量在配置文件中定義:
# Default name of the loop counter
# variable reference.
directive.foreach.counter.name = velocityCount
# Default starting value of the loop
# counter variable reference.
directive.foreach.counter.initial.value = 1
自帶方法:
$foreach.index //自帶方法 : 計數從0開始 相當於index
$foreach.hasNext //自帶方法 : 等於false代表是最后一個
$foreach.count //自帶方法 : 計數 從1開始 相對於$velocityCount
$foreach.first //自帶方法 : 是否是第一個
$foreach.last //自帶方法 : 是否是最后一個
#break:
使用 #break指令在任何時候停止循環
#if( $foreach.count > 3 ) #break #end
三、條件語句
形式一:#if #elseif #else #end
#if(condition) ... #elseif(condition) … #else … #end
形式二:#if #else #end
#if(condition) ... #else … #end
形式二:#if #end
#if(condition) … #end
四、關系操作符
Velocity 引擎提供了 AND、OR 和 NOT 操作符,分別對應&&、||和!
#if($foo && $bar) #end #if($foo || $bar) #end #if(!$bar) #end
五、宏
Velocity 中的宏可以理解為函數定義。
定義
#macro(macroName arg1 arg2 …)
...
#end
macroName:宏的名字
arg1 / arg2:宏的參數
調用
#macroName(arg1 arg2 …)
這里的參數之間使用空格隔開
宏的例子
#macro(sayHello $name) hello $name #end #sayHello(“velocity”) // 輸出的結果為 hello velocity
⚠️不推薦在界面模板中大量使用,經過測試,宏不支持方法重載
六、#parse 和 #include
#parse 和 #include 指令的功能都是在外部引用文件,而兩者的區別是,#parse 會將引用的內容當成類似於源碼文件,會將內容在引入的地方進行解析,#include 是將引入文件當成資源文件,會將引
入內容原封不動地以文本輸出。分別看以下例子:
// foo.vm 文件:
#set($name =“velocity”) // parse.vm:
#parse(“foo.vm”) // 輸出結果為:velocity // include.vm:
#include(“foo.vm”) // 輸出結果為:#set($name =“velocity”)
⚠️包含文件#inclue("模板文件名")或#parse("模板文件名"),主要用於處理具有相同內容的頁面,比如每個網站的頂部或尾部內容。
七、注釋
單行注釋:##
多行注釋:#* *#
文檔格式注釋:#** *#
八、單引號和雙引號
#set ($var="helo")
test"$var" 返回testhello:雙引號解析變量
test'$var' 返回test'$var':單引號不解析變量
可以通過設置 stringliterals.interpolate=false改變默認處理方式
補充
讀取不同數據的方法:
.get()
.getString()
.getJSONArray()
.getJSONObject()
.getBooleanValue()
數組的常用方法操作:
$myarray.isEmpty()數組是否為空
$myarray.size()獲取數組元素個數
$myarray.get(2)獲取數組指定下標的元素
$myarray.add()增加元素