久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

每個(gè)人應(yīng)該知道的NVelocity用法

 偷心無痕 2014-11-04

NVelocity是一個(gè)基于.NET的模板引擎(template engine)。它允許任何人僅僅簡(jiǎn)單的使用模板語言(template language)來引用由.NET代碼定義的對(duì)象,。從而使得界面設(shè)計(jì)人員與.NET程序開發(fā)人員基本分離,。

 一、nVelocity的常用功能簡(jiǎn)介

    1,、 在頁面中定義變量,,并進(jìn)行簡(jiǎn)單的運(yùn)算。

    2,、 在頁面中獲得對(duì)后臺(tái)程序?qū)嶓w對(duì)象的引用,。

    3、 在頁面中迭代實(shí)體對(duì)象集合,。

    4,、 在頁面中獲得實(shí)體對(duì)象的屬性,及其方法,。

    5,、 對(duì)邏輯判斷語句的支持。

    6,、 對(duì)外部文件的引用,。

    7、 對(duì)外部文件的解析,。

二,、nVelocity的工作原理

    可以使用.NET的反射實(shí)現(xiàn)。以下是nVelocity對(duì)迭代實(shí)體類的簡(jiǎn)單實(shí)現(xiàn)步驟:

    1,、 定義People類,,并擁有Name與Sex屬性。表示一個(gè)人,。

    2,、 在頁面中列出人物列表,則輸入以下代碼:

        #foreach($p in $ps)

          <p>歡迎您:$p.Name</p>

        #end

    3,、 獲取人物列表,,保存在_List中。并指定頁面中的字符串“ps”對(duì)應(yīng)_List,。

    4,、以文本方式讀取模板文件,并匹配#foreach…#end段,,如果匹配到則繼續(xù)匹配$X in $XX 段,,分別記錄用于保存集合與單項(xiàng)的字符,,本次為“p”與“ps”。

    5 ,、用Type對(duì)象的GetProperties()方法獲取_list中每一項(xiàng)的所有屬性,并在#foreach  #end段中循環(huán)將$p + 屬性名稱替換為當(dāng)前對(duì)象的當(dāng)前屬性的值,。當(dāng)然如果要調(diào)用對(duì)象的方法也可以用同樣的方式獲得,。

三、基本語法

     1,、特殊字符介紹

         A,、“#”:表示開始做什么事情。

         B,、“$”:表示用于獲得什么,。(以$開頭的表示“引用”意思是取得一些東東.可引用變量,屬性,,方法)

         C,、“##“:?jiǎn)涡凶⑨尅?/p>

         D、 “#*… …*#”:多行注釋,。

     2,、關(guān)鍵字

          A、 Set:開始做什么事情,,比如定義變量,,給變量重新賦值等。(注意:如果右邊的操作數(shù)是一個(gè)屬性或命令的引用而返回null,那么賦值將不會(huì)成功,,且在隨后的VTL中也不能再取出使用,如果要用做if條件,,一個(gè)解決辦法是,先給變量賦一個(gè)值,,然后再將一個(gè)屬性或命令的引用賦給該變量)

          B,、 Foreach:迭代語句

          C、 If:條件判斷語句

          D,、 Elseif

          E,、 Else

          F、 Include:對(duì)外部文件的引用,,開始位置為模板路徑,。

          G、 Parse:對(duì)外部文件的引用,,并用nVelocity方式解析,。

          H、 Macro:創(chuàng)建宏,,可以重復(fù)做某件事,,類似于方法。

          I、  Even:雙數(shù)執(zhí)行

          J,、  Odd :?jiǎn)螖?shù)執(zhí)行

          K,、 Each:每次都執(zhí)行

    (備注:所有變量在未定義之前不能使用(因?yàn)槲覀兞?xí)慣了有全局變量的習(xí)慣),一個(gè)合法的VTL標(biāo)示符是以一個(gè)字母開頭的,。.NET后臺(tái)定義的對(duì)象除外,。模板語言區(qū)分大小寫,所有的關(guān)鍵字必須為小寫,,默認(rèn)情況下,,NVelocity解析是不分大小寫的,當(dāng)然可以通過設(shè)置runtime.strict.math=true,,采用嚴(yán)格解析模式,。)

四、使用示例

    1,、  在頁面中使用變量

        定義變量:#set($a = “CNF”)

        引用變量:歡迎光臨:$a

         定義變量:#set($a = 1)

         運(yùn)算:#set($a = $a + 1)

         輸出:$a   ##得:2

         運(yùn)算:#set($a = $a*5)

         輸出:$a   ##得:10

       #set( $criteria = ["name", "address"] )

         #foreach( $criterion in $criteria )

               #set( $result = false )  //先設(shè)置默認(rèn)值

               #set( $result = $query.criteria($criterion) )

               #if( $result )

                       Query was successful

              #end

         #end

     (備注:從以上可以看出nVelocity的替換順序與.NET程序代碼的執(zhí)行基本一致,,如果放在Foreach語句塊中可以實(shí)現(xiàn)累加。并用If語句獲得行號(hào),,對(duì)特殊行號(hào)的內(nèi)容特殊處理,。所有變量在未定義之前不能使用,.NET后臺(tái)對(duì)象除外,,最好采用正規(guī)引用格式,,${a},正規(guī)引用格式一般用于在模板中直接調(diào)整字符串內(nèi)容;靜態(tài)引用輸出:NVelocity遇到一個(gè)不能處理的引用時(shí),,一般他會(huì)直接輸出這個(gè)引用$email的寫法,頁面上會(huì)看到的是$email,我們可以在$后面加上一個(gè)!號(hào),,那么就會(huì)輸出空白.$!{email}如果不能處理會(huì)輸出空白。如果email己定義了 (比如它的值是 foo),而這里你卻想輸出 $email. 這樣一個(gè)字符串,就需要使用轉(zhuǎn)義字符”\”,,如:\$email)

    2,、  在頁面中使用條件判斷語句

        #if ($p.StrSex == "女")

            #set($Sex = "女士")

       #elseif ($p.StrSex == "男")

            #set($Sex = "先生")

       #elseif ($p.StrSex == "無")

            #set($Sex = "人妖")

       #else

            #set($Sex = "怪物")

       #end

     (備注:可以嵌套在Foreach語句塊中,用于對(duì)每個(gè)列表對(duì)象進(jìn)行特殊顯示處理,。)

    3,、  創(chuàng)建宏,可以當(dāng)做方法使用,。

         

創(chuàng)建:#macro(Add $a $b)

         #set($c = $a + $b)

          <p>最后結(jié)果:$c</p>

      #end

 調(diào)用:#Add(1 2)

   

   (備注:模板引擎的初始化方法有3種,,一種參數(shù)為模板文件內(nèi)容,一種是帶模板文件地址,。結(jié)果發(fā)現(xiàn)帶模板文件內(nèi)容的,,在應(yīng)用宏的時(shí)候好像有點(diǎn)問題。另外一個(gè)就是假如在宏里面加入一個(gè)判斷語句,,則可以實(shí)現(xiàn)遞歸調(diào)用,。)

    4,、使用對(duì)象方法

        定義變量:#set($str = “CNF”)

        調(diào)用方法:$str.SubString(0,1) 

         輸出:C

         定義變量:#set($a = 123)

         調(diào)用方法:$a.GetType()

         輸出:System.Int32

    (備注:不管是.NET代碼定義的對(duì)象,還是設(shè)計(jì)人員在頁面中定義的變量,,都可以使用對(duì)象的方法及屬性,,這一點(diǎn)非常強(qiáng)大。)

     5,、使用even與odd簡(jiǎn)化代碼,,each輔助

         如上面所說用IF語句可以在列表中為每行創(chuàng)建不同的樣式,但如果只需要區(qū)分單行與雙行的話,,可以使用even與odd簡(jiǎn)化代碼。如下:

    

     #foreach($p in $ps)

              #even

              <p>雙行:$p.StrName</p>

             #odd

             <p>單行:$p.StrName</p>

      #end

    (備注:在使用這兩個(gè)關(guān)鍵字時(shí),,出現(xiàn)了與創(chuàng)建宏一樣的問題,,即在初始化模板引引擎的時(shí)候,如果是用模板文件內(nèi)容初始化的,,會(huì)出現(xiàn)問題)

     6,、引用外部文件

          Include與parse都有引入外部文件的作用,不同的是parse會(huì)根據(jù)nVelocity模板語言解析外部文件,。也就是說如果引入當(dāng)前模板,,則會(huì)出現(xiàn)死循環(huán)。

          #include 腳本元素讓模板設(shè)計(jì)者可以在模板中引入一個(gè)本地文件, 這個(gè)被引入的文件將不會(huì)經(jīng)過NVelocity的解析. 安全起見,,可以引放的文件只是是配置參數(shù)TEMPLATE_ROOT所定義目錄下的,,默認(rèn)為當(dāng)前目錄下.

#include( "head.html" )

        如果需要引入多個(gè)文件,可以像下面這樣.   

#include( "one.gif","two.txt","three.htm" )

            當(dāng)然,,還可用一個(gè)變量名來代替文件名引入.    

#include( "greetings.txt", $seasonalstock )

      #parse 元素指示可以引入一個(gè)包含TVL的本地文件,,這個(gè)文件將被NVeloict engine解析輸出。

#parse( "me.vm" )

         與 #include 指令不同, #parse 可以從引入的模板中得到變量引用.但#parse指令只能接受一個(gè)參數(shù).VTL templates 被#parse 的模板中還可以再包含#parse聲明,,默認(rèn)的深度為10,,這是由配置參數(shù)directive.parse.max.depth在文件velocity.properties中決定的,你可以修改它以適合項(xiàng)目要求,。

     7,、使用Foreach語句

          上面多次列出Foreach語句,相信已經(jīng)知道它的作用,。即循環(huán)列出一組對(duì)象集合,。比如:#foreach($p in $ps),其中$ps需要與后臺(tái)代碼中具體的實(shí)體類名稱對(duì)應(yīng),,$p代表$ps中的其中一項(xiàng),。上面已經(jīng)提到過,即$p可以調(diào)用實(shí)體類的屬性和方法,。

    (備注:#foreach 語句必須以#end結(jié)束,通過引用變量$velocityCount可以訪問到NVelocity提供的計(jì)數(shù)器:)

    8,、創(chuàng)建數(shù)組

          創(chuàng)建:#set($List = [“男”,”女”])

          遍歷:#foreach($Item in $List)

                      <p>List成員:$Item</p>

                       #end

          輸出:List成員:男

               List成員:女

提供一個(gè)NVelocity 操作類VelocityHelper,方便大家使用:點(diǎn)擊下載

NVelocity.dll下載:點(diǎn)擊下載

    VelocityHelper調(diào)用如下:

     

VelocityHelper vh = new VelocityHelper();

vh.Init("~/template/");    //模板路徑

vh.Put("templateVariable", Variable);

vh.Display("index.htm");

附:NVelocity常用語法指令

    對(duì)變量的引用:$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ],。

       在NVelocity中,對(duì)變量的引用都是以$開頭加上變量名稱,。當(dāng)使用!時(shí)表示當(dāng)此變量值為空時(shí),,顯示空字符串。比如當(dāng)$article為空,,那會(huì)顯示“$article“,,而$!article會(huì)顯示為“”。{}為變量名稱限定,,有時(shí)候變量名稱后會(huì)有字符串,,這是就需要用到{}了。比如$articleshow,,想引用$article,,這時(shí)只要修改為${article}就可以。其實(shí),,NVelocity對(duì)整個(gè)模板解析后都會(huì)變成這種模式,。

     對(duì)屬性的引用:$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[a..z, A..Z ][ a..z, A-Z, 0..9, -, _ ]* [ } ] 。

     例如$article.Title或者${article.Title},。

     對(duì)方法的引用:$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]*( [ optional parameter list...  ] ) [  } ],。

     例如:$article.GetListByTitle(‘nvelocity’)或${article.GetListByTitle(‘nvelocity’)}。其實(shí)對(duì)對(duì)象的屬性值也可以用$article.get_Title()獲得,。

     賦值指令#set:# [ { ] set [ } ]  ( $ref = [ ", ' ]arg[ ", ' ] ),。

     例如:$article.Title=’NVelocity’,$$article.Categories=[1,2,3],,當(dāng)然右側(cè)也可以使用復(fù)雜的表達(dá)式:$article.Title=$otherArticle.Title.SubString(0,3),,算術(shù)表達(dá)式:$article.Page=4/3等等。屬性賦值也可以用$article.set_Title(‘NVelocity’),。

     條件指令#if:# [ { ] if [ } ] ( [condition] ) [output] [ # [ { ] elseif [ } ] ( [condition] ) [output] ]* [ # [ { ] else [ } ] [output] ] # [ { ] end [ } ] ,。

     條件可以是返回bool的復(fù)查表達(dá)式。例如:#if($article.Total>1) $article.Title #else 沒有數(shù)據(jù) #end,。

     循環(huán)指令#foreach:# [ { ] foreach [ } ] ($refinarg)statement# [ { ] end [ } ],。

     例如:#foreach($article in $articles) $article.Title #end。

     引用靜態(tài)資源指令#include:# [ { ] include [ } ] ( arg[ arg2 ... argn] ),。

      例如:#include(‘tmp.js’),,會(huì)把tmp.js文件內(nèi)容插入當(dāng)前流。當(dāng)然可以使用表達(dá)式:#include($article.Url),。

     引用并解析資源指令#parse:# [ { ] parse [ } ] ( arg ),。

     例如:#parse(‘tmp.js’),與#include不同是,,假如tmp.js文件中有NVelocity的指令,,變量會(huì)進(jìn)行處理,,并把結(jié)果插入到當(dāng)前流。

     停止指令#stop:# [ { ] stop [ } ] ,。

     當(dāng)NVelocity解析到此指令時(shí),,會(huì)停止解析過程。一般用戶調(diào)試,。

     計(jì)算指令#evaluate:# [ { ] evaluate [ } ] ( arg ),。

     例如:#evaluate(‘$article.Title’),會(huì)在當(dāng)前輸出$article.Title

NVelocity的$與Jquery的$發(fā)生沖突時(shí)的解決方法有以下幾個(gè): 
1,、 
使用jQuery.noConflict,。 如:var j = jQuery.noConflict(); j.ajax(); 
缺點(diǎn):當(dāng)使用jQuery的相關(guān)插件時(shí),會(huì)使得插件失效哦! 
2,、 
使用jQuery代替$. 如:jQuery.ajax(); 
缺點(diǎn):不適合擴(kuò)展,,一旦替換成第三方庫(kù)時(shí),那就麻煩大發(fā) 
3,、 
wrap jQuery中的沖突方法。 
如$.ajax()在Velocity中會(huì)沖突,,則重新定義如下: 
function dw(){} 
dw.ajax=function(s){ jQuery.ajax(s); } dw.ajax(); 
4,、 
定義一個(gè)$JQ為$. 以后在js 中就可以用${JQ}AJAX了. 
在前臺(tái)這樣寫(定義):#set($JQ="$.") 


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多