成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

工具集核心教程 | 第四篇: Velocity模板引擎入門到進階

leon / 2875人閱讀

摘要:是一個基于的模板引擎。模板中未被定義的變量將被認為是一個字符串。公眾號回復全棧,領取前端,,產品經理,微信小程序,等資源合集大放送。公眾號回復面試,領取面試實戰(zhàn)學習資源。

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

Velocity腳本語法摘要 1. 變量 (1)變量的定義:

#set($name = "hello") 說明:velocity中變量是弱類型的。

當使用#set 指令時,括在雙引號中的字面字符串將解析和重新解釋,如下所示:

#set($directoryRoot = "www" )

#set($templateName = "index.vm" )

#set($template = "$directoryRoot/$templateName" )

$template

輸出將會是:www/index.vm

注:在velocity中使用$2.5這樣的貨幣標識是沒有問題得的,因為velocity中的變量總是以一個大寫或者小寫的字母開始的。

(2)變量規(guī)范的寫法

${name} ,也可以寫成:$name。提倡用前面的寫法。

例如:你希望通過一個變量$vice來動態(tài)的組織一個字符串。

? Jack is a $vicemaniac.

本來變量是$vice現(xiàn)在卻變成了$vicemaniac,這樣Veloctiy就不知道您到底要什么了。所以,

應該使用規(guī)范的格式書寫 : Jack is a ${vice}maniac

現(xiàn)在Velocity知道變量是$vice而不是$vicemaniac。

注意:當引用屬性的時候不能加{}

(3)變量的賦值:
?$name="hello"

賦值的左邊必須是一個變量或者是屬性引用。右邊可以是下面六種類型之一:

?變量引用,字面字符串,屬性引用,方法引用,字面數(shù)字,數(shù)組列表。

下面的例子演示了上述的每種類型:

#set( $monkey = $bill ) ## variable reference

#set( $monkey.Friend = "monica" ) ## string

#set( $monkey.Blame = $whitehouse.Leak ) ## property reference

#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference

#set( $monkey.Number = 123 ) ##number

#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList

注意:
①如果上述例子中的右值是null, 則左值不會被賦值,也就是說會保留以前的值。

velocity模板中未被定義的變量將被認為是一個字符串。例如:

#set($foo = "gibbous")

$moon = $foo

輸出結果為:

$moon = gibbous

velocity模板中不會將reference解釋為對象的實例變量。例如:$foo.Name將被解

釋為Foo對象的getName()方法,而不是Foo對象的Name實例變量。例如:

$foo.getBar() 等同于$foo.Bar ;

$data.getUser("jon") 等同于$data.User("jon") ;

data.getRequest().getServerName() 等同于

$data.Request.ServerName等同于${data.Request.ServerName}
2. 循環(huán)
#foreach ($element in $list)

   This is $element.

?? $velocityCount

#end

例子:

#set( $list = ["pine", "oak", "maple"])

#foreach ($element in $list)

$velocityCount

This is $element.
#end

輸出的結果為:

1 This is pine.

2 This is oak.

3 This is maple.

每次循環(huán)$list中的一個值都會賦給$element變量。

$list可以是一個Vector、Hashtable或者Array。分配給$element的值是一個java對象,并且可以通過變量被引用。

例如:如果$element t是一個javaProduct類,并且這個產品的名字可以通過調用他的getName()方法得到。

#foreach ( $key in $list.keySet())

Key: $key -> Value: $list.get($key) 
#end

提示:velocity中大小寫敏感。

Velocity還特別提供了得到循環(huán)次數(shù)的方法,$velocityCount變量的名字是Velocity默認的名字。

?例子:

First example:

#foreach ( $foo in [1..5] )

? ??$foo

? ??#end

Second example:

#foreach ( $bar in [2..-2] )

?? ?$bar

??? #end

Third example:

#set ( $arr = [0..1] )

?? ?#foreach ( $i in $arr )

??? $i

?? #end

上面三個例子的輸出結果為:

?First example:

?1 2 3 4 5

Second example:

? 2 1 0 -1 -2

Third example:

?0 1
3. 條件語句
#if (condition)

#elseif (condition)

#else

?#end
4. 語句的嵌套
#foreach ($element in $list)

?## inner foreach 內循環(huán)

#foreach ($element in $list)

This is $element. $velocityCount 
inner
#end ?## inner foreach 內循環(huán)結束 ?## outer foreach This is $element. $velocityCount
outer
#end

語句中也可以嵌套其他的語句,如#if…#else…#end等。

5. 注釋 (1)單行注釋:
?## This is a single line comment.
(2)多行注釋:
#*

?Thus begins a multi-line comment. Online visitors won’t

?see this text because the Velocity Templating Engine will

?ignore it.

?*#
(3)文檔格式:
#**

?This is a VTL comment block and

?may be used to store such information

?as the document author and versioning

information:

@version 1.1

@author xiao

*#
6. 關系和邏輯操作符

Velocity 也具有邏輯AND, ORNOT 操作符。

## example for AND

#if($foo && $bar)This and that

#end

例子中#if() 指令僅在$foo$bar 都為真的時候才為真。如果$foo 為假,則表達式也為假;

并且 $bar 將不被求值。如果 $foo 為真,Velocity 模板引擎將繼續(xù)檢查$bar的值,如果 $bar

?為真,則整個表達式為真。并且輸出This AND that 。如果 $bar 為假,將沒有輸出因為整

個表達式為假。

7.Velocity 中的宏

Velocity中的宏我們可以理解為函數(shù)。

①宏的定義

#macro(宏的名稱 $參數(shù)1 $參數(shù)2 …)

?????? 語句體(即函數(shù)體)

#end

②宏的調用

#宏的名稱($參數(shù)1 $參數(shù)2 …)

?????? 說明:參數(shù)之間用空格隔開。
8.#stop

?停止執(zhí)行模板引擎并返回,把它應用于debug是很有幫助的。

9.#include與#parse

#include#parse的作用都是引入本地文件, 為了安全的原因,被引入的本地文件只能在

TEMPLATE_ROOT目錄下。

區(qū)別:

(1) 與#include不同的是,#parse只能指定單個對象。而#include可以有多個

如果您需要引入多個文件,可以用逗號分隔就行:

#include ("one.gif", "two.txt", "three.htm" )

在括號內可以是文件名,但是更多的時候是使用變量的:

#include ( “greetings.txt”, $seasonalstock )
(2) #include被引入文件的內容將不會通過模板引擎解析;

?而#parse引入的文件內容Velocity將解析其中的velocity語法并移交給模板,意思就是說

相當與把引入的文件copy到文件中。

#parse是可以遞歸調用的,例如:如果dofoo.vm包含如下行:

Count down.
#set ($count = 8) #parse ("parsefoo.vm")
All done with dofoo.vm!

那么在parsefoo.vm模板中,你可以包含如下VTL

$count

#set($count = $count - 1)

#if ( $count > 0 )
#parse( "parsefoo.vm" ) #else
All done with parsefoo.vm! #end

的顯示結果為:

Count down.

8

7

6

5

4

3

2

1

0

All done with parsefoo.vm!

All done with dofoo.vm!

注意:在vm中使用#parse來嵌套另外一個vm時的變量共享問題。如:

->a.vm 里嵌套 b.vm;

->a.vm 里定義了變量 $param;

->b.vm 里可以直接使用$param,無任何限制。

但需要特別注意的是,如果b.vm里同時定義有變量$param,則b.vm里將使用b.vm里定義的值。

10.轉義字符""的使用

如果reference被定義,兩個’’意味著輸出一個’’,如果未被定義,剛按原樣輸出。

如:

#set($email = "foo" )

$email

$emai

l$email

$email

輸出:

foo

$email

foo

$email

如果$email 未定義

$email

$email

$email

$email

輸出:

$email

$email

$email

$email
11.內置對象

Velocity內置了一些對象,在vm模版里可以直接調用,列舉如下:

$request、$response、$session,另外,模板內還可以使用 $msg內的消息工

具訪問 Struts 的國際化資源,達到簡便實現(xiàn)國際化的方法。

12. 數(shù)組訪問

對數(shù)組的訪問在Velocity中存在問題,因為Velocity只能訪問對象的方法,而數(shù)組

又是一個特殊的Array,所以雖然數(shù)組可以進行循環(huán)列舉,但卻不能定位訪問特定

位置的元素,如 strs[2],數(shù)組對固定位置元素的訪問調用了Array的反射方法

get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數(shù)組要么改成

List等其他類容器的方式來包裝,要么就通過公用Util類的方式來提供,傳入數(shù)組

對象和要訪問的位置參數(shù),從而達到返回所需值的目的。

結束語

Velocity 可以被應用在各種各樣的情景下,本文介紹的只是它的一種用途而已,它還可以被用來做 MVC 結構中的view 層,或者動態(tài)內容靜態(tài)化等。另外,Velocity 并不是唯一的模板框架,同樣很優(yōu)秀的 Freemarker、Thymeleaf 也獲得了非常廣泛的應用,有興趣的讀者可以去深入研究更多的功能和用途。

附錄及參考文獻

使用 Velocity 模板引擎快速生成代碼

寫在最后

歡迎關注、喜歡、和點贊后續(xù)將推出更多的工具集教程,敬請期待。
歡迎關注我的微信公眾號獲取更多更全的學習資源,視頻資料,技術干貨!

公眾號回復“學習”,拉你進程序員技術討論群,干貨資源第一時間分享。

公眾號回復“視頻”,領取800GJava視頻學習資源。

公眾號回復“全棧”,領取1T前端,Java,產品經理,微信小程序,Python等資源合集大放送。





公眾號回復“慕課”,領取1T慕課實戰(zhàn)學習資源。








公眾號回復“實戰(zhàn)”,領取750G項目實戰(zhàn)學習資源。

公眾號回復“面試”,領取8G面試實戰(zhàn)學習資源。



文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/77591.html

相關文章

  • 具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代碼

    摘要:歡迎關注我的微信公眾號獲取更多更全的學習資源,視頻資料,技術干貨公眾號回復學習,拉你進程序員技術討論群,干貨資源第一時間分享。公眾號回復全棧,領取前端,,產品經理,微信小程序,等資源合集大放送。公眾號回復面試,領取面試實戰(zhàn)學習資源。 前言 不知道大家有沒有這樣的感覺,在平時開發(fā)中,經常有很多dao、service類中存著很多重復的代碼,Velocity提供了模板生成工具,今天我教大家怎...

    leon 評論0 收藏0
  • 具集核心教程 | 第三篇: Thymeleaf模板引擎入門進階

    摘要:介紹簡單說,是一個跟類似的模板引擎,它可以完全替代。不包含標記刪除但刪除其所有的孩子。公眾號回復全棧,領取前端,,產品經理,微信小程序,等資源合集大放送。公眾號回復面試,領取面試實戰(zhàn)學習資源。 thymeleaf介紹 簡單說, Thymeleaf 是一個跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP。相較與其他的模板引擎,它有如下三個極吸引人的特點:...

    abson 評論0 收藏0
  • 一起來學SpringBoot | 四篇:整合Thymeleaf模板

    摘要:在使用上述模板,默認從下加載。介紹是現(xiàn)代化服務器端的模板引擎,不同與其它幾種模板的是的語法更加接近,并且具有很高的擴展性。特點支持無網(wǎng)絡環(huán)境下運行,由于它支持原型,然后在標簽里增加額外的屬性來達到模板數(shù)據(jù)的展示方式。 SpringBoot 是為了簡化 Spring 應用的創(chuàng)建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業(yè)務本身而不是外部的XML配置,...

    TZLLOG 評論0 收藏0

發(fā)表評論

0條評論

leon

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<