




已閱讀5頁,還剩7頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
此文檔收集于網絡,如有侵權,請聯系網站刪除目 錄1.變量12.循環23.條件語句24.語句的嵌套25.注釋26.關系和邏輯運算符37.宏38. #stop49. #include與#parse410.轉義字符的使用 411.內置對象 512.數組的訪問 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) 變量規范的寫法$name ,也可以寫成:$name。提倡用前面的寫法。例如:你希望通過一個變量$vice來動態的組織一個字符串。Jackisa$vicemaniac.本來變量是$vice現在卻變成了$vicemaniac,這樣Veloctiy就不知道您到底要什么了。所以,應該使用規范的格式書寫:Jackisa$vicemaniac現在Velocity知道變量是$vice而不是$vicemaniac。注意:當引用屬性的時候不能加(3) 變量的賦值: $name=hello賦值的左邊必須是一個變量或者是屬性引用。右邊可以是下面六種類型之一: 變量引用,字面字符串,屬性引用,方法引用,字面數字,數組列表。下面的例子演示了上述的每種類型:#set( $monkey = $bill ) # 變量引用#set( $monkey.Friend = monica ) # 字面字符串#set( $monkey.Blame = $whitehouse.Leak ) # 屬性引用#set( $monkey.Plan = $spindoctor.weave($web) ) # 方法引用#set( $monkey.Number = 123 ) # 字面數字#set( $monkey.Say = Not, $my, fault ) # 數組列表注意:如果上述例子中的右值是null, 則左值不會被賦值,也就是說會保留以前的值。velocity模板中未被定義的變量將被認為是一個字符串。例如:#set($foo=gibbous)$moon=$foo輸出結果為:$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. 循環#foreach($elementin$list)Thisis$element. $velocityCount#end例子:#set( $list = pine, oak, maple)#foreach($elementin$list)$velocityCountThisis$element.#end輸出的結果為:1 This is pine. 2 This is oak. 3 This is maple.每次循環$list中的一個值都會賦給$element變量。$list可以是一個Vector、Hashtable或者Array。分配給$element的值是一個java對象,并且可以通過變量被引用。例如:如果$element t是一個java的Product類,并且這個產品的名字可以通過調用他的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#endSecond example:#foreach ( $bar in 2.-2 )$bar#endThird example:#set ( $arr = 0.1 )#foreach ( $i in $arr )$i#end上面三個例子的輸出結果為: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 內循環 #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)單行注釋:#Thisisasinglelinecomment.(2)多行注釋:#*Thusbeginsamulti-linecomment.OnlinevisitorswontseethistextbecausetheVelocityTemplatingEnginewill ignoreit.*#(3)文檔格式:#*ThisisaVTLcommentblockandmaybeusedtostoresuchinformation asthedocumentauthorandversioninginformation:version1.1author xiao *#6. 關系和邏輯操作符Velocity 也具有邏輯AND, OR 和 NOT 操作符。如# 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 )#elseAll done with parsefoo.vm!#end的顯示結果為: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轉義字符的使用如果reference被定義,兩個意味著輸出一個,如果未被定義,剛按原樣輸出。如:#set($email = foo )$email$email$email$email輸出:foo$emailfoo$email如果$email 未定義$email$email$email$email輸出:$email$email$email$email11內置對象Velocity內置了一些對象,在vm模版里可以直接調用,列舉如下:$request、$response、$session,另外,模板內還可以使用 $msg內的消息工具訪問 Struts 的國際化資源,達到簡便實現國際化的方法。12. 數組訪問對數組的訪問在Velocity中存在問題,因為Velocity只能訪問對象的方法,而數組又是一個特殊的Array,所以雖然數組可以進行循環列舉,但卻不能定位訪問特定位置的元素,如 strs2,數組對固定位置元素的訪問調用了Array的反射方法get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數組要么改成List等其他類容器的方式來包裝,要么就通過公用Util類的方式來提供,傳入數組對象和要訪問的位置參數,從而達到返回所需值的目的。示例部分1Hello world的示例代碼:(1)Velocity模板(hello.html) New Document hello,$name! (注意:這里的name與VelocityTest.java中的名稱要一致)(2)將velocity模板的內容轉換的類(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轉換 * author */public class VelocityTest/* * 主函數 * param args */public static void main(String args) /獲取模板引擎VelocityEngine ve = new VelocityEngine();/模板文件所在的路徑String path = D:/java/jproject/regedit/webroot; /設置參數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(); /把數據填入上下文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)環境的搭建在lib目錄內分別copy進:velocity-1.4.jar,velocity-dept.jar;下載地址:/velocity/(4)運行后的結果如下: New Document hello,world! 2Servlet和Velocity結合示例(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()調用, * 在此找出模版的路徑 */ 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主要的商業邏輯處理方法,由VelocityServlet自動調用 * param ctx 模板上下文 * return Template 模板信息 */ public Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context ctx ) /主要在此設置演示用的數據,開發中在此調用相應的業務處理流程, /并設置返回到頁面的數據 /待展示的列表數據 String p1 = 第一位:LiuDong; String p2 = 第二位:Liang.xf; Vector personList = new Vector(); /中文需要轉換 try personList.addElement(new String(p1.g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六一演出帶隊活動方案
- 六一童心企劃活動方案
- 六一美餐活動方案
- 六一節活動簽到活動方案
- 六堡鎮植樹活動方案
- 六年級組織植樹活動方案
- 醫護禮儀考試試題及答案
- 冶金教資考試試題及答案
- 藥三基考試試題及答案
- 安全色考試題及答案
- 拖拉機駕駛員培訓(課件)
- 醫院感染風險評估表(適用于病房、換藥室、治療室、注射室)
- 媒介發展史概論
- GA 2093-2023公安機關警務輔助人員工作證內卡技術規范
- 兩辦意見八硬措施煤礦安全生產條例宣貫學習課件
- 2024年6月福建省普通高中學生學業基礎會考生物試題
- 第8課《求救信號》課件
- 某公路工程有限公司專項應急預案及某公路項目部安全生產應急預案
- ?;愤\輸車輛的GPS監控與追蹤系統
- 湖北省華中師大一附中2024屆數學高二第二學期期末質量檢測試題含解析
- 花管注漿施工工藝
評論
0/150
提交評論