




已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
此文檔收集于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除目 錄1.變量12.循環(huán)23.條件語句24.語句的嵌套25.注釋26.關(guān)系和邏輯運(yùn)算符37.宏38. #stop49. #include與#parse410.轉(zhuǎn)義字符的使用 411.內(nèi)置對(duì)象 512.數(shù)組的訪問 5示例部分5Velocity語法1. 變量(1) 變量的定義:#set($name = hello) 說明:velocity中變量是弱類型的。當(dāng)使用#set 指令時(shí),括在雙引號(hào)中的字面字符串將解析和重新解釋,如下所示:#set($directoryRoot = www )#set($templateName = index.vm )#set($template = $directoryRoot/$templateName )$template輸出將會(huì)是:www/index.vm注:在velocity中使用$2.5這樣的貨幣標(biāo)識(shí)是沒有問題得的,因?yàn)関elocity中的變量總是以一個(gè)大寫或者小寫的字母開始的。(2) 變量規(guī)范的寫法$name ,也可以寫成:$name。提倡用前面的寫法。例如:你希望通過一個(gè)變量$vice來動(dòng)態(tài)的組織一個(gè)字符串。Jackisa$vicemaniac.本來變量是$vice現(xiàn)在卻變成了$vicemaniac,這樣Veloctiy就不知道您到底要什么了。所以,應(yīng)該使用規(guī)范的格式書寫:Jackisa$vicemaniac現(xiàn)在Velocity知道變量是$vice而不是$vicemaniac。注意:當(dāng)引用屬性的時(shí)候不能加(3) 變量的賦值: $name=hello賦值的左邊必須是一個(gè)變量或者是屬性引用。右邊可以是下面六種類型之一: 變量引用,字面字符串,屬性引用,方法引用,字面數(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, 則左值不會(huì)被賦值,也就是說會(huì)保留以前的值。velocity模板中未被定義的變量將被認(rèn)為是一個(gè)字符串。例如:#set($foo=gibbous)$moon=$foo輸出結(jié)果為:$moon=gibbousvelocity模板中不會(huì)將reference解釋為對(duì)象的實(shí)例變量。例如:$foo.Name將被解釋為Foo對(duì)象的getName()方法,而不是Foo對(duì)象的Name實(shí)例變量。例如:$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中的一個(gè)值都會(huì)賦給$element變量。$list可以是一個(gè)Vector、Hashtable或者Array。分配給$element的值是一個(gè)java對(duì)象,并且可以通過變量被引用。例如:如果$element t是一個(gè)java的Product類,并且這個(gè)產(chǎn)品的名字可以通過調(diào)用他的getName()方法得到。#foreach ( $key in $list.keySet()Key: $key - Value: $list.get($key) #end提示:velocity中大小寫敏感。Velocity還特別提供了得到循環(huán)次數(shù)的方法,$velocityCount變量的名字是Velocity默認(rèn)的名字。例子: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上面三個(gè)例子的輸出結(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都為真的時(shí)候才為真。如果$foo 為假,則表達(dá)式也為假;并且 $bar 將不被求值。如果 $foo 為真,Velocity 模板引擎將繼續(xù)檢查$bar的值,如果 $bar 為真,則整個(gè)表達(dá)式為真。并且輸出This AND that 。如果 $bar 為假,將沒有輸出因?yàn)檎麄€(gè)表達(dá)式為假。7.Velocity 中的宏Velocity中的宏我們可以理解為函數(shù)。宏的定義#macro(宏的名稱 $參數(shù)1 $參數(shù)2 ) 語句體(即函數(shù)體)#end宏的調(diào)用#宏的名稱($參數(shù)1 $參數(shù)2 )說明:參數(shù)之間用空格隔開。8#stop 停止執(zhí)行模板引擎并返回,把它應(yīng)用于debug是很有幫助的。9#include與#parse#include和#parse的作用都是引入本地文件, 為了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目錄下。區(qū)別:(1) 與#include不同的是,#parse只能指定單個(gè)對(duì)象。而#include可以有多個(gè)如果您需要引入多個(gè)文件,可以用逗號(hào)分隔就行:#include (one.gif, two.txt, three.htm )在括號(hào)內(nèi)可以是文件名,但是更多的時(shí)候是使用變量的:#include ( “greetings.txt”, $seasonalstock )(2) #include被引入文件的內(nèi)容將不會(huì)通過模板引擎解析; 而#parse引入的文件內(nèi)容Velocity將解析其中的velocity語法并移交給模板,意思就是說相當(dāng)與把引入的文件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來嵌套另外一個(gè)vm時(shí)的變量共享問題。如:-a.vm 里嵌套 b.vm;-a.vm 里定義了變量 $param;-b.vm 里可以直接使用$param,無任何限制。但需要特別注意的是,如果b.vm里同時(shí)定義有變量$param,則b.vm里將使用b.vm里定義的值。10轉(zhuǎn)義字符的使用如果reference被定義,兩個(gè)意味著輸出一個(gè),如果未被定義,剛按原樣輸出。如:#set($email = foo )$email$email$email$email輸出:foo$emailfoo$email如果$email 未定義$email$email$email$email輸出:$email$email$email$email11內(nèi)置對(duì)象Velocity內(nèi)置了一些對(duì)象,在vm模版里可以直接調(diào)用,列舉如下:$request、$response、$session,另外,模板內(nèi)還可以使用 $msg內(nèi)的消息工具訪問 Struts 的國(guó)際化資源,達(dá)到簡(jiǎn)便實(shí)現(xiàn)國(guó)際化的方法。12. 數(shù)組訪問對(duì)數(shù)組的訪問在Velocity中存在問題,因?yàn)閂elocity只能訪問對(duì)象的方法,而數(shù)組又是一個(gè)特殊的Array,所以雖然數(shù)組可以進(jìn)行循環(huán)列舉,但卻不能定位訪問特定位置的元素,如 strs2,數(shù)組對(duì)固定位置元素的訪問調(diào)用了Array的反射方法get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數(shù)組要么改成List等其他類容器的方式來包裝,要么就通過公用Util類的方式來提供,傳入數(shù)組對(duì)象和要訪問的位置參數(shù),從而達(dá)到返回所需值的目的。示例部分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è)置參數(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); (注意:與上面的對(duì)應(yīng))/輸出路徑 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進(jìn):velocity-1.4.jar,velocity-dept.jar;下載地址:/velocity/(4)運(yùn)行后的結(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 = /; /設(shè)置路徑 p.setProperty( Velocity.FILE_RESOURCE_LOADER_PATH, path); return p; /* * Velocity主要的商業(yè)邏輯處理方法,由VelocityServlet自動(dòng)調(diào)用 * param ctx 模板上下文 * return Template 模板信息 */ public Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context ctx ) /主要在此設(shè)置演示用的數(shù)據(jù),開發(fā)中在此調(diào)用相應(yīng)的業(yè)務(wù)處理流程, /并設(shè)置返回到頁面的數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公交車火災(zāi)應(yīng)急預(yù)案(3篇)
- 2025年軟件水平技術(shù)員試題及答案深度分析
- 行政管理實(shí)際案例試題及答案
- 風(fēng)險(xiǎn)識(shí)別對(duì)公司戰(zhàn)略修訂的支持作用試題及答案
- 遺囑與繼承法的規(guī)定試題及答案
- 網(wǎng)絡(luò)管理員考試多樣化試題及答案
- 軟件設(shè)計(jì)師考試靈活應(yīng)變能力的提升與實(shí)踐試題及答案
- 2025二級(jí)VB考試要點(diǎn)試題分析
- 軟硬件協(xié)同設(shè)計(jì)試題及答案
- 《2025續(xù)簽勞動(dòng)合同 范文》
- 鍋爐安裝合同協(xié)議書
- 【必考題】中考初中三年級(jí)政治上模試題附答案
- 2024年江西省公安機(jī)關(guān)警務(wù)輔助人員條例訓(xùn)練題庫321題及答案
- 魚類卵子受精機(jī)制與精子激活
- 植物營(yíng)養(yǎng)學(xué)智慧樹知到期末考試答案章節(jié)答案2024年黑龍江八一農(nóng)墾大學(xué)
- MOOC 市場(chǎng)調(diào)查與研究-南京郵電大學(xué) 中國(guó)大學(xué)慕課答案
- 涼水井煤礦礦山地質(zhì)環(huán)境與土地復(fù)墾方案
- 思明區(qū)公開招聘非在編聘用人員報(bào)名表
- 聯(lián)合辦公協(xié)議書范本
- 質(zhì)量部運(yùn)行卓越績(jī)效體系
- 利妥昔單抗用藥注意事項(xiàng)課件
評(píng)論
0/150
提交評(píng)論