以簡求快 Java快速開發架構LML之velocity常用基本文法

來源:互聯網
上載者:User

       總以為明天會更好,但是今天都做不好,明天怎麼會好?

       任何學習總是從概念開始,所以先摘抄一段網路上關於Velocity的定義:

       Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用範本語言(template language)來引用由java代碼定義的對象。

當 Velocity應用於web開發時,介面設計人員可以和java程式開發人員同步開發一個遵循MVC架構的web網站,也就是說,頁面設計人員可以只關 注頁面的顯示效果,而由java程式開發人員關注商務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web網站的長期維護提供 了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。

Velocity的能力遠不止web網站 開發這個領域,例如,它可以從模板(template)產生SQL和PostScript、XML,它也可以被當作一個獨立工具來產生原始碼和報告,或者 作為其他系統的整合組件使用。Velocity也可以為Turbine web開發架構提供模板服務(template service)。Velocity+Turbine提供一個模板服務的方式允許一個web應用以一個真正的MVC模型進行開發。

      下面簡單的總結一下,Velocity的使用方法,當然你完全可以在網路上找到類似的文檔。我更主要的是想說明一下我們常用的文法,並給出一些執行個體。

  1, 注釋,任何一種語言中,注釋總是必不可少的。

    (1)     單行注釋:
        ## 這是單行注釋

    (2)     多行注釋:
            #*
        這是多行注釋

          *#

  2, 輸出,也就是資料展現。

    $userName

    這樣便可以輸出使用者名稱了。但是,並不是絕對的能夠輸出使用者名稱,因為可能這裡輸出的變數並不存在。如果userName這個變數不存在,或者為空白,$userName將會被當                  作字串直接輸出,也就是當我們期望在userName為空白的時候輸出空,但是卻輸出了’$userName’。為了避免這種情況,推薦這樣的變數輸出寫法:

    $!{userName}

  3, 變數聲明與賦值

    一般情況下,我們不推薦在html頁面中直接聲明Velocity變數,因為這會增加html介面的複雜度。如果確實有必要,可以使用下面的語句聲明變數並賦值:

    #set($userName=’hanmeimei’)

    請注意:Velocity的變數聲明都要帶著$符號。

    在LML中,我們經常在所謂的後台,也就是Action中給變數賦值,這樣在Action對應的html模板中也可以直接使用該變數。可使用一下兩種方法:

      (1)     傳統的getter/setter

      (2)     ViewBag.Add(key,value)

    相比之下,第二種非傳統的方式更快速。

  4, 算術運算

    Velocity支援在模板中使用(+,—,*,/),例如:

    #set($a=1)

    #set($b=1)

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

    C在算對的情況下等於2,算錯的情況下等於3.。有一個問題大家需要注意,我在使用四則運算的時候,發現’—‘不起作用,最後經過嘗試,發現需要在變數和運算子之          間留一個空格,這樣就沒問題了。如果,你也遇到這樣的問題,也可以這麼嘗試一下。

  5, 邏輯運算

    支援一下幾個運算子,就如同java一樣:

    &&:與。

    ||:或。

    !:非。

 

  6, 迭代

    #foreach ($item in $list)
    
        這是第  $velocityCount  個元素: $item
    #end

    $velocityCount,表示當前序號。

    還要說一下我們在LML中分頁顯示資料用到的迭代,如下:

    #foreach($item in $pager.result.rows)

             $item.userName

      ##以下兩種方式可迭代列

      #set($row=$item.values().toArray())

      ##方式1

      #foreach($a in $row) $!a #end

      ##方式2

      #foreach($i in [0..2])  $row.item($i) #end

    #end

    $pager.result是在分頁Action中查詢到的一個資料集Result。

    我們也可以在模板中直接聲明並賦值一個list,而後進行迭代:

    #set( $list = ["a", "b", "c"])

    #foreach ($item in $list)

      $velocityCount

    #end

    還有一種情況,我們需要迭代從1到10,所有的整數:

    #foreach ($item in [1..10])

      $velocityCount

    #end

    注意中間就是兩個點。

    查閱很多資料,都直接說明Velocity不能迭代數組,下面說明原因:

    對數組的訪問在Velocity中存在問題,因為Velocity只能訪問對象的方法,而數組又是一個特殊的Array,所以雖然數組可以進行迴圈列舉,但卻不能定位訪問特定位置 的       元素,如 strs[2],數組對固定位置元素的訪問調用了Array的反射方法get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數組要麼改成List等其他類容器的方式來封裝,要麼就通過公用Util類的方式來提供,傳入數組對象和要訪問的位置參數,從而達到返回所需值的目的。

    Velocity支援迭代的資料類型有:Vector、Hashtable或者Array

  7, 條件判斷

    #if (條件1)

    #elseif (條件2)

    #else

    #end

    一直不是很理解Velocity的資料類型,所以在項目中最多使用的是String,就像這裡的條件運算式,我們經常這樣寫: if(“$!{userSex}”==”0”),雖然性別使用int表示。

  8, 檔案引入,#include與#parse

    兩者作用類似,但是有以下不同:

    (1) 與#include不同的是,#parse只能指定單個對象。而#include可以有多個

      如果您需要引入多個檔案,可以用逗號分隔就行:
      #include ("a.gif", "b.txt", "c.htm" )
      在括弧內可以是檔案名稱,但是更多的時候是使用變數的:
      #include ( “a.txt”, $photo )

    (2) #include被引入檔案的內容將不會通過模板引擎解析;

      而#parse引入的檔案內容Velocity將解析其中的velocity文法並移交給模板,意思就是說相當與把引入的檔案copy到檔案中。

      以上兩點摘自互連網,到目前我基本沒有使用過#include。#parse最大的用處或許是這樣用:

      #parse(“title.html”)

             類似layout。

  9, 內建對象

    Velocity內建了一些對象,在模版裡可以直接調用,列舉如下:
    $request、$response、$session

    這些一直也沒使用過,完全可以在Action頁面把各種對象處理好了。

    基本上,在我們的一般開發中,掌握以上文法已經可以應付自如了。是不是很簡單呢,我們希望的不就是簡單嗎,簡單所以快。寫的不好,敬請見諒。

     補充:
     LML支援在html模板中直接調用java方法,並可以向方法傳遞參數(字面值,或者Velocity變數),還可以輸出方法的傳回值。當然,為了避免模板頁面過於複雜,我們還是應該盡量減少在模板中調用java方法。如果確實有必要調用,則需要現在模板頁面對應的Action類上先行聲明:
     @Helper( { TestHelper.class })
     這樣就可以在html模板中調用:
     $!TestHelper.Test("$!{userName}")
     這裡提出了協助類的概念,一般情況下我們把需要多次在html模板中調用的方法集中寫在一個類中,我們稱它為協助類。方法是否靜態並不做要求,可自行選擇。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.