版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、velocity中文手冊Velocity用戶指南什么是Velocity?Velocity是基于Java的模板引擎。它允許Web頁面開發(fā)者引用Java代碼中定義的方法。Web設(shè)計者可以和Java程序開發(fā)者并行開發(fā)遵循MVC模式的Web站點(diǎn)。這意味著,Web設(shè)計者可以將精力放在好的Web站點(diǎn)設(shè)計上,而Java程序開發(fā)者可以將精力放在編寫代碼上。Velocity將Java代碼從Web頁面中分離,使Web站點(diǎn)更具長期可維護(hù)性,并提供了一種替代JSP或PHP的方案。VTL(Velocity Template Language)介紹VTL提供一種簡單、容易和干靜的方法將動態(tài)內(nèi)容合并到Web頁面。VTL使用
2、引用(references)將動態(tài)內(nèi)容插入到Web頁面中。變量是一種引用,可以指向Java代碼中的定義內(nèi)容,或者由Web頁面中的VTL語句來獲得值。下面是一個可以插入到HTML文檔的VTL語句的例子:#set( $a = Velocity )VTL語句以#開頭,并包含指令(set)。變量以$開頭,用引號引起。引號可以是單引號,也可以是雙引號。前者引用具體的String值;后者可以包含Velocity引用,例如”hello, $name”, $name會用其當(dāng)前的值替換。上面的例子是將值Velocity賦值給變量a。當(dāng)變量被賦值后,就可以在HTML文檔的任何地方引用,下面是Hello Veloc
3、ity World!的例子:#set( $foo = Velocity )Hello $foo World!注釋VTL支持單行注釋(以#開始)和多行注釋(包括在#*和*#之間),下面是一個例子:This text is visible. # This text is not visible.This text is visible.This text is visible. #* This text, as part of a multi-line comment,is not visible. This text is not visible; it is also part of them
4、ulti-line comment. This text still not visible. *# This text is outsidethe comment, so it is visible.# This text is not visible.引用VTL有3種類型的引用:變量、屬性和方法。作為一個設(shè)計者,必須和Java工程師在VTL引用的名稱(標(biāo)識符)上一致,以便在模板中使用它們。引用是作為String對象處理的。(1)變量變量的格式:$VTL標(biāo)識符VTL標(biāo)識符以字母開始,由字母、數(shù)字、橫劃線(-)或下劃線(_)組成。變量或者從模板中的set指令獲得值(如前面的例子),或者Java
5、代碼(同名變量)中獲得值。Velocity只處理已定義的變量引用,對于沒有定義的變量引用,Velocity原樣返回。例如下面的例子:#set( $foo = gibbous )$moon = $foo輸出結(jié)果是:$moon = gibbous(2)屬性屬性的格式:$VTL標(biāo)識符. VTL標(biāo)識符下面是屬性引用的例子:$customer.Address$purchase.Total拿第一例子來說,有兩種意思:l 返回Hashtable對象customer中鍵值為Address的值l $customer.getAddress()方法引用的縮寫(JavaBean屬性的getter方法)至于是哪種情況,
6、Velocity會做決定,返回合適的值。(3)方法方法的格式:$VTL標(biāo)識符(參數(shù)列表)下面是方法引用的例子:$customer.getAddress()$purchase.getTotal()$page.setTitle( My Home Page )$person.setAttributes( Strange, Weird, Excited )前面兩個例子可以縮寫成屬性引用(如屬性引用的例子)。屬性引用和方法引用的主要區(qū)別是方法引用可以指定參數(shù)列表。(4)正式引用符號:正式引用符號在使用變量引用含糊的地方進(jìn)行區(qū)分??聪旅娴睦樱?set( $vice = klepto )Jack is a
7、 $vicemaniac.輸出結(jié)果是:Jack is a $vicemaniac.($vicemaniac沒有定義,原樣輸出)#set( $vice = klepto )Jack is a $vicemaniac.輸出結(jié)果是:Jack is a kleptomaniac.(使用正式引用符號將$vice和其它文本區(qū)分開)(5)Quit引用符號:!看下面的例子:初始時,$email沒有值,所以文本框中會顯示值$email,而更希望是空白。下面是使用Quit引用符號的例子:當(dāng)$email沒有值時,Velocity會用空串替代$email。(6)特殊字符轉(zhuǎn)義對于$、#等特殊字符要正常顯示,可以使用進(jìn)行
8、轉(zhuǎn)義,轉(zhuǎn)義為。下面是一個例子:#set( $email = foo )$email$email$email$email輸出結(jié)果是:foo$emailfoo$email指令(Directives)引用允許模板設(shè)計者為Web站點(diǎn)生成動態(tài)內(nèi)容,而指令使巧妙處理Java代碼的腳本元素容易使用。(1)#set格式:#set( LHS = RHS )l LHS可以是變量引用或?qū)傩砸胠 RHS可以是引用、字符串、數(shù)字、ArrayList或Map下面的例子展示了上面的每種RHS類型:#set( $monkey = $bill ) # variable reference#set( $monkey.Frien
9、d = monica ) # string literal#set( $monkey.Blame = $whitehouse.Leak ) # property reference#set( $monkey.Plan = $spindoctor.weave($web) ) # method reference#set( $monkey.Number = 123 ) #number literal#set( $monkey.Say = Not, $my, fault ) # ArrayList#set( $monkey.Map = banana : good, roast beef : bad)
10、 # Map對于ArrayList和Map,可以使用對應(yīng)的Java方法訪問其中的元素值:$monkey.Say.get(0)$monkey.Map.get(bannana)$monkey.Map.banana # same as abovel RHS可以是簡單的算術(shù)表達(dá)式#set( $value = $foo + 1 ) # Addition#set( $value = $bar - 1 ) # Subtraction#set( $value = $foo * $bar ) # Multiplication#set( $value = $foo / $bar ) # Division#set(
11、 $value = $foo % $bar ) # Remainder算術(shù)表達(dá)式只支持整型。/的結(jié)果為整數(shù);如果非整型數(shù)值,返回nulll 如果RHS的結(jié)果為null,是不會賦值給LHS的看下面的例子:#set( $criteria = name, address )#foreach( $criterion in $criteria ) #set( $result = $query.criteria($criterion) ) #if( $result ) Query was successful #end#end上面使用$result檢查是否執(zhí)行成功是有問題的。如果第一次執(zhí)行成功,$resu
12、lt不為null,則后面的執(zhí)行不管是否成功,檢查條件總是成立。改進(jìn)的方法是在每次執(zhí)行前初始化為false:#set( $criteria = name, address )#foreach( $criterion in $criteria )#set( $result = false ) #set( $result = $query.criteria($criterion) ) #if( $result ) Query was successful #end#endl String文字可以使用雙引號或單引號括起。兩者的主要區(qū)別是雙引號中的引用會替換成相應(yīng)的值,而單引號中的引用原樣輸出#set(
13、 $directoryRoot = www )#set( $templateName = index.vm )#set( $template = $directoryRoot/$templateName )$template輸出結(jié)果是:www/index.vm如果使用單引號:#set( $template = $directoryRoot/$templateName )輸出結(jié)果是:$directoryRoot/$templateNamel 使用雙引號可以實(shí)現(xiàn)字符串的串聯(lián),如下面的例子: #set( $size = Big ) #set( $name = Ben ) #set($clock =
14、$sizeTall$name ) The clock is $clock.(2)#if / #elseif / #else#if指令在條件成立時,顯示#if和#end之間的內(nèi)容,否則顯示#else和#end之間的內(nèi)容。下面是一個例子:#if( $foo ) Velocity!#end條件成立有兩種情況:l 如果$foo是boolean,則$foo要為true;l 否則,$foo不為null#if指令中可以使用的關(guān)系和邏輯符號包括:l 、=、l &(and)、|(or)、!(not)(3)循環(huán):foreach下面是一個例子:#foreach( $product in $allProducts )
15、 $product#end$allProducts的內(nèi)容可以是Vector、Hashtable或ArrayList,每次取出一個值賦值給$product;返回的值是一個Java對象,可以用來引用具體的方法。下面的例子假設(shè)$allProducts是Hashtable對象:#foreach( $key in $allProducts.keySet() ) Key: $key - Value: $allProducts.get($key)#endVelocity提供了訪問循環(huán)計數(shù)變量的簡單方法:#foreach( $customer in $customerList ) $velocityCount
16、$customer.Name#end$velocityCount是Velocity表示循環(huán)計數(shù)的內(nèi)部變量,缺省開始值為1。該設(shè)置在perties文件中定義:# Default name of the loop counter# variable = velocityCount# Default starting value of the loop# counter variable reference.directive.foreach.counter.initial.value = 1可
17、以在#foreach指令中使用范圍操作符n.m,其中n和m必須是整型:First example:#foreach( $foo in 1.5 )$foo#endSecond example:#foreach( $bar in 2.-2 )$bar#endThird example:#set( $arr = 0.1 )#foreach( $i in $arr )$i#end輸出結(jié)果是:First example:1 2 3 4 5Second example:2 1 0 -1 -2Third example:0 1(4)#include#include指令導(dǎo)入本地文件到#include指令定義的
18、地方。導(dǎo)入的文件內(nèi)容不會被模板引擎解析。出于安全考慮,導(dǎo)入的文件應(yīng)該放在TEMPLATE_ROOT目錄下。一次可以導(dǎo)入多個文件,文件名之間用逗號分隔;并且通常使用變量引用來替代文件名。下面是一個例子:#include( greetings.txt, $seasonalstock )(5)#parse#parse指令允許導(dǎo)入一個包含VTL的本地文件,并由模板引擎進(jìn)行解析。#parse指令導(dǎo)入的文件必須放在TEMPLATE_ROOT目錄下,并且一次只能導(dǎo)入一個文件。允許在Velocity模板中嵌套執(zhí)行#parse指令。最大深度由perties文件中的parse_direct
19、ive.maxdepth定義。下面是一個例子:Count down.#set( $count = 8 )#parse( parsefoo.vm )All done with dofoo.vm!包含的parsefoo.vm文件如下:$count#set( $count = $count - 1 )#if( $count 0 ) #parse( parsefoo.vm )#else All done with parsefoo.vm!#end輸出結(jié)果是:Count down.876543210All done with parsefoo.vm!All done with dofoo.vm!(6)#
20、stop#stop指令停止模板引擎的執(zhí)行并返回。這在Debug時很有用。(7)#macro#macro指令允許定義一段重復(fù)使用的VTL模板(稱Velocimacros)。l Velocimacros可以有0或多個參數(shù)。下面是一個例子:#macro( tablerows $color $somelist )#foreach( $something in $somelist ) $something#end#end這個叫tablerows的Velocimacro帶2個參數(shù):一個color和一個array。下面的代碼包含對tablerows的調(diào)用:#set( $greatlakes = Superi
21、or,Michigan,Huron,Erie,Ontario )#set( $color = blue ) #tablerows( $color $greatlakes )輸出結(jié)果為: Superior Michigan Huron Erie Ontariol Velocimacros可以在VTL模板中定義為inline,這樣對其它的VTL模板是無效的;要使Velocimacros在所有VTL模板中共享,可以將Velocimacros定義在Velocimacros模板庫(全局)中。l Velocimacros屬性在perties文件中定義,提供實(shí)現(xiàn)Velocimacro
22、s的靈活性:velocimacro.library = VM_global_library.vmvelocimacro.permissions.allow.inline = truevelocimacro.permissions.allow.inline.to.replace.global = falsevelocimacro.permissions.allow.inline.local.scope = falsevelocimacro.context.localscope = falsevelocimacro.library.autoreload = falsevelocimacro.lib
23、rary:定義逗號分隔的Velocimacros全局模板庫,缺省是VM_global_library.vm,可以增加自定義的模板庫;velocimacro.permissions.allow.inline:指定是否允許在VTL模板中定義Velocimacros,缺省是true(允許);velocimacro.permissions.allow.inline.to.replace.global:指定是否允許inline定義的Velocimacros替換同名的全局Velocimacros,缺省是false(不允許);velocimacro.permissions.allow.inline.local.scope:指定inline定義是否是定義的模板中可見,缺省是false;velocimacro.context.localscope:指定context內(nèi)容是否是本地范圍的,缺省是false;如果設(shè)為true,則使用#set指令對c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024校服生產(chǎn)與校園文化衫銷售及售后維護(hù)服務(wù)合同2篇
- 2車輛租賃公司和個人之間的租車協(xié)議2024
- 2024物業(yè)寵物托管中心與寵物服務(wù)商合同
- 2024年網(wǎng)絡(luò)安全技術(shù)合作合同協(xié)議3篇
- 2024標(biāo)準(zhǔn)化房產(chǎn)居間業(yè)務(wù)協(xié)議一
- 2024年網(wǎng)絡(luò)游戲開發(fā)與運(yùn)營合同:虛擬物品與玩家權(quán)益保護(hù)
- 鄭州師范學(xué)院《素描表現(xiàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江旅游職業(yè)學(xué)院《專業(yè)外語(秘書)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中南大學(xué)《生化工程》2023-2024學(xué)年第一學(xué)期期末試卷
- 《保護(hù)性拆除》課件
- GB/T 24478-2023電梯曳引機(jī)
- 代收實(shí)收資本三方協(xié)議范本
- 2024屆高考語文復(fù)習(xí):作文主題訓(xùn)練人文情懷
- 炊事員個人衛(wèi)生習(xí)慣養(yǎng)成-課件
- 人教版八年級英語下冊全冊課件【完整版】
- 商務(wù)接待表格
- 腸梗阻導(dǎo)管治療
- 哈工大機(jī)械原理課程設(shè)計產(chǎn)品包裝生產(chǎn)線(方案1)含運(yùn)動簡圖
- 中建施工項(xiàng)目管理手冊
- 縫紉工(三級)技能理論考試題庫及答案
- 漢語教學(xué) 《成功之路+進(jìn)步篇+2》第17課課件
評論
0/150
提交評論