博客 / 詳情

返回

【Velocity】 (vm)模板引擎

什麼是 Velocity?

Velocity是基於Java的模板引擎,它允許頁面設計者引用Java中定義的方法。頁面設計者和Java開發者能夠同時使用MVC的模式開發網站,這樣網頁設計者能夠把精力放在頁面的設計上,程序員也可以把精力放在代碼開發上。Velocity把Java代碼從Web頁面中分離, 使網站可維護性更強,同時也在Java服務器頁面(JSPs)或者PHP中提供了可視化交互的選擇。

一、註釋

單行: ## 句子
多行: #* 句子句子 *#
文檔格式: #** 句子句子 **#

二、變量

賦值和讀取:
//賦值
#set($name = “hello”)
//讀取
${name} ,也可以寫成:$name。

注意: VM會保留你所留下的空格,所以如拼字符串時 都是鼓勵用{}。
eg:  
#if($a==1)true enough#elseno way!#end // 這時候會報錯 因為沒有#elseno這個的語法

#if($a==1)true enough#else no way!#end  //這個時候no way前面會有空格

#if($a==1)true enough#{else}no way!#end    // 正確示範 

注意幾點:

  • 1.右值是null, 則左值不會被賦值,也就是説會保留以前的值。
eg:
#set( $monkey = "monica" ) 
#set( $monkey = $monkey_a ) 
$monkey

結果輸出:monica
因為右邊的$monkey_a並沒有定義過
  • 2.velocity模板中不會將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.ServerName}
  • 3.變量的作用域 是從上而下往後的都會有。 踩過這個坑,描述也不太對看例子
A $monkey 
<div class="list">
    <div class="item">
        <div class="inner-title">
            #set( $monkey = "jerry" )
            <span class="color_bg point"></span>保障額度高
            B $monkey 
        </div>
        <div class="inner-list">
            <p>年度基礎免賠額:<span class="color bold">1萬元</span>&nbsp;</p>
        </div>
        C $monkey 
    </div>
    <div class="item">
        D $monkey 
        <div class="inner-title">
            <span class="color_bg point"></span>住院醫療金
        </div>
        <div class="inner-list">
            <p>重症監護費用:不設單項最高年限額</p>
        </div>
    </div>
E $monkey 
</div>

以上ABCDE的輸出結果是
輸出結果: 除了A是字符串顯示$monkey , 其餘的都是:jerry


三、循環

#foreach ($item in $list)
    $foreach.index   //自帶方法 : 計數從0開始 相當於index  
    $foreach.hasNext //自帶方法 : 等於false代表是最後一個 
    $foreach.count   //自帶方法 : 計數 從1開始 相對於$velocityCount
    $foreach.first   //自帶方法 : 是否是第一個
    $foreach.last    //自帶方法 : 是否是最後一個
    
    #if( $foreach.count > 3 )
        #break       //使用 #break指令在任何時候停止循環
    #end 

    $velocityCount   //計數 從1開始
    This is $item</br>
#end
輸出: 1 this is a
//$velocityCount  計數

-------------------------------

例如數據格式
$datas的值:
{
  {“key123":{"bonus":"1","name":"aa"}},
  {"key124”:{"bonus”:"2","name":”bb"}}
}
$yanShi的值:
{
  {“key123":{"title":"特殊門診醫療金","values":[600000,600000,600000]}},
  {"key124”:{"title”:”住院醫療金","values”:[100000,200000,600000]}}
}
方法一:
#foreach ( $key in $datas.keySet())
    Key: $key -> Value: $datas.get($key) 

#end
輸出:Key:key123 -> Value: {"bonus":"1","name":"aa"}

方法二:
#foreach ( $key in $bonus_datas.entrySet())
    Key: $key.getKey() -> Value: $key.getValue() 

    $yanShi.getJSONObject($key.getKey()).get(“title”) 
    //例如循環datas裏面再對應去讀yanShi的title 
#end
輸出:Key:key123 -> Value: {"bonus":"1","name":"aa"}
     

再補充一些讀取不同數據的方法:
.get()
.getString()
.getJSONArray()
.getJSONObject()
.getBooleanValue()

四、條件語句

#if (condition)
#elseif (condition)
#else
#end

五、關係邏輯符

not && ||

#if ( ! $foo)#end             
#if ($foo && $foo)#end    
#if ($foo1 || $foo2)#end   

數組的常用方法操作:

$myarray.isEmpty()數組是否為空

$myarray.size()獲取數組元素個數

$myarray.get(2)獲取數組指定下標的元素

$myarray.add()增加元素

來源參考:
中文:http://ifeve.com/apache-veloc...
英文:http://velocity.apache.org/en...
參考: http://www.blogjava.net/alexw...

mark一下 僅供參考 歡迎更正補充 end

user avatar sunhengzhe 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.