




已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
此文檔收集于網(wǎng)絡,如有侵權(quán),請聯(lián)系網(wǎng)站刪除目 錄1.變量12.循環(huán)23.條件語句24.語句的嵌套25.注釋26.關(guān)系和邏輯運算符37.宏38. #stop49. #include與#parse410.轉(zhuǎn)義字符的使用 411.內(nèi)置對象 512.數(shù)組的訪問 5示例部分5Velocity語法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)的組織一個字符串。Jackisa$vicemaniac.本來變量是$vice現(xiàn)在卻變成了$vicemaniac,這樣Veloctiy就不知道您到底要什么了。所以,應該使用規(guī)范的格式書寫:Jackisa$vicemaniac現(xiàn)在Velocity知道變量是$vice而不是$vicemaniac。注意:當引用屬性的時候不能加(3) 變量的賦值: $name=hello賦值的左邊必須是一個變量或者是屬性引用。右邊可以是下面六種類型之一: 變量引用,字面字符串,屬性引用,方法引用,字面數(shù)字,數(shù)組列表。下面的例子演示了上述的每種類型:#set( $monkey = $bill ) # 變量引用#set( $monkey.Friend = monica ) # 字面字符串#set( $monkey.Blame = $whitehouse.Leak ) # 屬性引用#set( $monkey.Plan = $spindoctor.weave($web) ) # 方法引用#set( $monkey.Number = 123 ) # 字面數(shù)字#set( $monkey.Say = Not, $my, fault ) # 數(shù)組列表注意:如果上述例子中的右值是null, 則左值不會被賦值,也就是說會保留以前的值。velocity模板中未被定義的變量將被認為是一個字符串。例如:#set($foo=gibbous)$moon=$foo輸出結(jié)果為:$moon=gibbousvelocity模板中不會將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.ServerName2. 循環(huán)#foreach($elementin$list)Thisis$element. $velocityCount#end例子:#set( $list = pine, oak, maple)#foreach($elementin$list)$velocityCountThisis$element.#end輸出的結(jié)果為:1 This is pine. 2 This is oak. 3 This is maple.每次循環(huán)$list中的一個值都會賦給$element變量。$list可以是一個Vector、Hashtable或者Array。分配給$element的值是一個java對象,并且可以通過變量被引用。例如:如果$element t是一個java的Product類,并且這個產(chǎn)品的名字可以通過調(diào)用他的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#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 13. 條件語句#if (condition) #elseif (condition) #else #end4. 語句的嵌套#foreach ($element in $list) # inner foreach 內(nèi)循環(huán) #foreach ($element in $list) This is $element. $velocityCount inner#end # inner foreach 內(nèi)循環(huán)結(jié)束 # outer foreach This is $element. $velocityCount outer#end語句中也可以嵌套其他的語句,如#if#else#end等。5. 注釋(1)單行注釋:#Thisisasinglelinecomment.(2)多行注釋:#*Thusbeginsamulti-linecomment.OnlinevisitorswontseethistextbecausetheVelocityTemplatingEnginewill ignoreit.*#(3)文檔格式:#*ThisisaVTLcommentblockandmaybeusedtostoresuchinformation asthedocumentauthorandversioninginformation:version1.1author xiao *#6. 關(guān)系和邏輯操作符Velocity 也具有邏輯AND, OR 和 NOT 操作符。如# 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宏的調(diào)用#宏的名稱($參數(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 )在括號內(nèi)可以是文件名,但是更多的時候是使用變量的:#include ( “greetings.txt”, $seasonalstock )(2) #include被引入文件的內(nèi)容將不會通過模板引擎解析; 而#parse引入的文件內(nèi)容Velocity將解析其中的velocity語法并移交給模板,意思就是說相當與把引入的文件copy到文件中。#parse是可以遞歸調(diào)用的,例如:如果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 )#elseAll done with parsefoo.vm!#end的顯示結(jié)果為:Count down.876543210All 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轉(zhuǎn)義字符的使用如果reference被定義,兩個意味著輸出一個,如果未被定義,剛按原樣輸出。如:#set($email = foo )$email$email$email$email輸出:foo$emailfoo$email如果$email 未定義$email$email$email$email輸出:$email$email$email$email11內(nèi)置對象Velocity內(nèi)置了一些對象,在vm模版里可以直接調(diào)用,列舉如下:$request、$response、$session,另外,模板內(nèi)還可以使用 $msg內(nèi)的消息工具訪問 Struts 的國際化資源,達到簡便實現(xiàn)國際化的方法。12. 數(shù)組訪問對數(shù)組的訪問在Velocity中存在問題,因為Velocity只能訪問對象的方法,而數(shù)組又是一個特殊的Array,所以雖然數(shù)組可以進行循環(huán)列舉,但卻不能定位訪問特定位置的元素,如 strs2,數(shù)組對固定位置元素的訪問調(diào)用了Array的反射方法get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數(shù)組要么改成List等其他類容器的方式來包裝,要么就通過公用Util類的方式來提供,傳入數(shù)組對象和要訪問的位置參數(shù),從而達到返回所需值的目的。示例部分1Hello world的示例代碼:(1)Velocity模板(hello.html) New Document hello,$name! (注意:這里的name與VelocityTest.java中的名稱要一致)(2)將velocity模板的內(nèi)容轉(zhuǎn)換的類(VelocityTest.java)import java.io.File;import java.io.FileOutputStream;import java.io.PrintWriter;import java.io.Writer;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;import org.apache.velocity.app.VelocityEngine;/* * Velocity轉(zhuǎn)換 * author */public class VelocityTest/* * 主函數(shù) * param args */public static void main(String args) /獲取模板引擎VelocityEngine ve = new VelocityEngine();/模板文件所在的路徑String path = D:/java/jproject/regedit/webroot; /設置參數(shù)ve.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);/處理中文問題ve.setProperty(Velocity.INPUT_ENCODING,GBK);ve.setProperty(Velocity.OUTPUT_ENCODING,GBK);try /初始化模板ve.init();Velocity模板的名稱/獲取模板(hello.html)Template template = ve.getTemplate(hello.html); /獲取上下文VelocityContext root = new VelocityContext(); /把數(shù)據(jù)填入上下文root.put(name,world); (注意:與上面的對應)/輸出路徑 Strint outpath = e:/helloworld.html;/輸出Writer mywriter = new PrintWriter(new FileOutputStream(new File(outpath);template.merge(root, mywriter);mywriter.flush(); catch (Exception e) e.printStackTrace();(3)環(huán)境的搭建在lib目錄內(nèi)分別copy進:velocity-1.4.jar,velocity-dept.jar;下載地址:/velocity/(4)運行后的結(jié)果如下: New Document hello,world! 2Servlet和Velocity結(jié)合示例(1)example.html Velocity Welcom to Velocity! Heres the list of people Names: #foreach ($name in $theList) $name #end (2)servletpackage com.koal.velocity;import java.io.IOException;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.Properties;import java.util.Vector;import javax.servlet.ServletConfig;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.velocity.Template;import org.apache.velocity.context.Context;import org.apache.velocity.servlet.VelocityServlet;import org.apache.velocity.app.Velocity;import org.apache.velocity.exception.ResourceNotFoundException;import org.apache.velocity.exception.ParseErrorException;public class SampleServlet extends VelocityServlet /* * 由VelocityServlet.init()調(diào)用, * 在此找出模版的路徑 */ protected Properties loadConfiguration(ServletConfig config ) throws IOException, FileNotFoundException Properties p = new Properties(); /取得路徑 String path = config.getServletContext().getRealPath(/); if (path = null) System.out.println( SampleServlet.loadConfiguration() : unable to + get the current webapp root. Using /. Please fix.); path = /; /設置路徑 p.setProperty( Velocity.FILE_RESOURCE_LOADER_PATH, path); return p; /* * Velocity主要的商業(yè)邏輯處理方法,由VelocityServlet自動調(diào)用 * param ctx 模板上下文 * return Template 模板信息 */ public Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context ctx ) /主要在此設置演示用的數(shù)據(jù),開發(fā)中在此調(diào)用相應的業(yè)務處理流程, /并設置返回到頁面的數(shù)據(jù) /待展示的列表數(shù)據(jù) String p1 = 第一位:LiuDong; String p2 = 第二位:Liang.xf; Vector personList = new Vector(); /中文需要轉(zhuǎn)換 try personList.addElement(new String(p1.g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字倫理治理:生成式AI技術(shù)風險管控與法律規(guī)制體系研究
- 生態(tài)補償機制在鄰避沖突治理中的應用與完善
- 少先隊活動規(guī)劃與實施方案研究
- MEA碳捕集技術(shù)集成在節(jié)能模擬研究中的應用探索
- 文化產(chǎn)業(yè)管理師崗位面試問題及答案
- 食品感官質(zhì)量評估與分析技術(shù)研究-洞察闡釋
- 神牡安神膠囊的質(zhì)量控制標準研究-洞察闡釋
- 測量數(shù)據(jù)預處理技術(shù)-洞察闡釋
- 會計題目及答案
- 智能監(jiān)測系統(tǒng)在水資源生態(tài)系統(tǒng)服務功能評估中的應用-洞察闡釋
- 石獅子購銷合同協(xié)議
- 2025廣州市荔灣區(qū)輔警考試試卷真題
- 課題申報書:基于核心素養(yǎng)發(fā)展理念的小學數(shù)學跨學科主題學習設計的策略研究
- 模聯(lián)面試題及答案
- 上海市楊浦區(qū)2025屆高三語文一模質(zhì)量調(diào)研試卷(含答案)
- 貴州省遵義市2024年八年級《數(shù)學》上學期期末試題與參考答案
- 隔壁拆房相鄰協(xié)議書
- GB/T 320-2025工業(yè)用合成鹽酸
- 2025(人教版)小升初數(shù)學總復習 知識點總結(jié)+專項練習(含答案)
- 山東省青島市青島2025年第五十八中學一模數(shù)學試題含答案
- 老年人誤吸的預防團體標準
評論
0/150
提交評論