Velocity學習(二)之語法

2022-06-07 13:30:13 字數 4488 閱讀 2234

在 hellovelocity.vm 裡面可以看到很多以 # 和$符開頭的內容,這些都是 velocity 的語法,在 velocity 中所有的關鍵字都是以 # 開頭的,而所有的變數則是以$開頭

#set($name="

velocity

")

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

以 "$" 開頭,第乙個字元必須為字母

變數可以包含的字元有以下內容:

$

$name

在模板檔案中使用$name 或者$ 來使用定義的變數。推薦使用$ 這種格式,因為在模板中同時可能定義了類似$name 和$names 的兩個變數,如果不選用大括號的話,

引擎就沒有辦法正確

識別$names 這個變數。

對於乙個複雜物件型別的變數,例如$person,可以使用$ 來訪問 person 的 name 屬性。值得注意的是,這裡的$ 並不是直接訪問 person 的 name 屬性,而是訪問 person 的

getname() 方法,所以$ 和$ 是一樣的,即$=$

在第一小點中,定義了乙個變數,同時給這個變數賦了值。對於 velocity 來說,變數是弱資料型別的,可以在賦了乙個 string 給變數之後再賦乙個數字或者陣列給它。可以將以下六種資料型別賦給一

個 velocity 變數:變數引用, 字面字串, 屬性引用, 方法引用, 字面數字, 陣列列表。

1、右值是null, 則左值不會被賦值,也就是說會保留以前的值。

#set( $monkey = "

monica")

#set( $monkey =$monkey_a )

$monkey

結果輸出:monica,因為右邊的$monkey_a並沒有定義過

2、velocity模板中不會將reference解釋為物件的例項變數,詳情見上方

3、變數的作用域 是從上而下往後的都會有

a$monkey 

class="

list

">

class="

item

">

class="

inner-title」>

#set( $monkey = 「jerry"

)class="

color_bg point

">

保障額度高b$monkey

class="

inner-list

">

年度基礎免賠額:class="

color bold

">1萬元 

c$monkey

class="

item

">d$monkey

class="

inner-title

">

class="

color_bg point

">

住院醫療金

class="

inner-list

">

重症監護費用:不設單項最高年限額

e$monkey

// 以上abcde的輸出結果是

// 輸出結果: 除了a是字串顯示$monkey , 其餘的都是:jerry

#foreach($element in

$list)

this

is$element

$velocitycount

#end

velocity 引擎會將 list 中的值迴圈賦給 element 變數,同時會建立乙個$velocitycount 的變數作為計數,從 1 開始,每次迴圈都會加 1.

#foreach迴圈得到的是值,和es6中的for...of相似

# 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指令在任何時候停止迴圈

#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是將引入檔案當成資源檔案,會將引

入內容原封不動地以文字輸出。分別看以下例子:

//

foo.vm 檔案:

#set($name =「velocity」)

#parse(「foo.vm」)

//輸出結果為:velocity

#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()增加元素

官網使用 velocity 模板引擎快速生成**

《apache velocity使用者指南》官方文件

Velocity模板語法說明

用來標識velocity的關鍵字,包括 set if else end foreach end include parse macro等 用來標識velocity的變數 如 i msg tagutil.options 等。用來明確標識velocity變數 比如在頁面中,頁面中有乙個 someonen...

veloCity中常用語法小總結

最近專案中用到了velocity與struts2結合,總結一下valocity實用的標籤 1 變數宣告 set lihan lihan 2 輸出變數 lihan 有這個變數則輸出,沒有則輸出 lihan lihan 有這個變數則輸出,無則不輸出 3 集合遍歷 foreach lihan in lis...

XPath 學習二 語法

xpath 使用路徑表示式來選取 xml 文件中的節點或節點集。節點是通過沿著路徑 path 或者步 steps 來選取的。表示式描述 nodename 選取此節點的所有子節點。從根節點擊取。從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置。選取當前節點。選取當前節點的父節點。選取屬性。在下...