国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

leon / 2829人閱讀

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

Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。 當Velocity應用于web開發時,界面設計人員可以和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只 關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。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)變量規范的寫法

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

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

? Jack is a $vicemaniac.

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

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

現在Velocity知道變量是$vice而不是$vicemaniac

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

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

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

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

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

#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. 循環
#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.

每次循環$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還特別提供了得到循環次數的方法,$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 內循環

#foreach ($element in $list)

This is $element. $velocityCount 
inner
#end ?## inner foreach 內循環結束 ?## 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 模板引擎將繼續檢查$bar的值,如果 $bar

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

個表達式為假。

7.Velocity 中的宏

Velocity中的宏我們可以理解為函數。

①宏的定義

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

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

#end

②宏的調用

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

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

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

9.#include與#parse

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

TEMPLATE_ROOT目錄下。

區別:

(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 的國際化資源,達到簡便實現國際化的方法。

12. 數組訪問

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

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

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

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

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

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

結束語

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

附錄及參考文獻

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

寫在最后

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

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

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

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





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








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

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



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

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

相關文章

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

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

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

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

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

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

    TZLLOG 評論0 收藏0

發表評論

0條評論

leon

|高級講師

TA的文章

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