最小的 Velocity 教程

工做之後,我愈來愈能體會到80/20法則的強大。
這是一個不能否認的事實,經常使用 20% 的技術能夠解決工做中 80% 的場景。
因此我但願能介紹給你 Velocity 技術 20%,幫助你勝任 80% 的工做。html

廢話少說,進入正題。java

概要

  1. Velocity 是什麼?
  2. Velocity 能作什麼?
  3. Velocity 示例

1. Velocity 是什麼?

Velocity 是一個基於Java的模版引擎,它提供模版語言用於引用Java代碼定義的對象。code

2. Velocity 能作什麼?

  1. Velocity能建立HTML頁面,並預留佔位符。(最基本用途)
  2. Velocity能基於模板生成Java,SQL源代碼。(沒見過)
  3. 自動生成電子郵件。(沒見過)
  4. 讀取XML,並轉換成須要的文檔格式,一般是HTML。(沒見過)

3. Velocity示例

Velocity 註解

單行 ##
多行 #* *#
代碼塊註釋(信息) ##* *#htm

Velocity 變量

定義:對象

#set( $foo = "Velocity" )

使用:ci

$foo
${foo}

Velocity 集合

#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )

Velocity 條件判斷

#if( $foo < 10 )
    <strong>Go North</strong>
#elseif( $foo == 10 )
    <strong>Go East</strong>
#else
    <strong>Go West</strong>
#end

Velocity 循環

#foreach( $customer in $customerList )
    #if( $foreach.count > 5 )
        #break
    #end
    $customer.Name
#end

Velocity 引用文件

#include( "one.vm" ) one.vm 不解析。
#parse( "me.vm" ) me.vm 解析。

Velocity 定義代碼塊

#define( $block )
Hello $who
#end

#set( $who = 'World!' )
$block

Velocity 宏調用

  • 無參
#macro( d )
<tr><td></td></tr>
#end

#d()
  • 單參
#macro( d )
<tr><td>$!bodyContent</td></tr>
#end

#@d()Hello#end
  • 任意參數

定義文檔

#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
    <tr><td bgcolor=$color>$something</td></tr>
#end
#end

調用字符串

#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
#set( $color = "blue" )
<table>
    #tablerows( $color $greatlakes )
</table>

輸出get

<table>
    <tr><td bgcolor="blue">Superior</td></tr>
    <tr><td bgcolor="blue">Michigan</td></tr>
    <tr><td bgcolor="blue">Huron</td></tr>
    <tr><td bgcolor="blue">Erie</td></tr>
    <tr><td bgcolor="blue">Ontario</td></tr>
</table>

Velocity 填坑

1. 各類寫法it

$foo
## is the same as
${foo}

$foo.getBar()
## is the same as
$foo.Bar

$data.setUser("jon")
## is the same as
#set( $data.User = "jon" )

$data.getRequest().getServerName()
## is the same as
$data.Request.ServerName
## is the same as
${data.Request.ServerName}

2. Velocity 變量未定義
使用 $!,例

$!foo

當 foo 未定義,輸出空白字符串。

3. Velocity 調用順序
Velocity中$customer.address,調用順序:

getaddress()
getAddress()
get("address")
isAddress()

4. #if ($foo)
兩種狀況都返回true:
(1)$foo是一個 boolean 類型,且爲 true。
(2)$foo不是 0,也不是 null。

5. #if ($foo == $bar)
由於Velocity變量最終都做爲字符串輸出,因此Velocity會自動調用 .toString() 將變量轉換成字符串。
因此,$foo 和 $bar 都當成字符串進行比較。即便Java代碼中類型不一樣,也有可能返回true。

Velocity 嚴格模式

Velocity 1.6引入嚴格引用模式,經過設置Velocity配置屬性「runtime.references.strict」爲true激活。
當遇到沒有定義或者存在歧義的狀況Velocity將拋出異常。

但願這篇文章對你有幫助。by iamtjcn

相關文章
相關標籤/搜索