2011-05-25 40 views

回答

0

我沒有在VTL中創建數組,但將數組傳遞給VTL上下文並使用它們。在VTL,您不能檢索通過索引數組的內容,你只使用的foreach,因爲例如該代碼是從我的動態SQL生成VTL腳本複製:

#foreach($col in $Columns) SUM($col.DBColumn) AS ''$col.Name''#if($velocityCount!=$Columns.Count), #end #end 

出於這個原因,我們也不能有二維數組。當我需要一個數組在一行中存儲2個對象時,我使用了定義一個新類的解決方法,並將該類的對象放入單維數組中。

40

根據Apache Velocity User Guide,分配的右手邊的類型可以是的

  • 可變參考
  • 列表項
  • 字符串文字
  • 屬性參考
  • 方法參考
  • 數量字面
  • Arr ayList
  • 地圖

您可以創建一個空的列表,這將滿足陣列中的所有您的需求,在Apache Velocity模板中包含的表達式:

#set($foo = []) 

或初始化值:

#set($foo = [42, "a string", 21, $myVar]) 

然後,添加使用Java元素添加方法:

$foo.add(53); 
$foo.add("another string"); 

但要注意,因爲列表類型的Java.add()方法返回一個布爾值,所以當您將一個元素添加到列表中時,Velocity將打印出例如「true」或「false」 「添加」功能的結果。

一個簡單的解決辦法是賦予add函數的變量的結果:上述

<span>$foo[1]</span> 

表達會顯示:

#set($bar = $foo.add(42)) 

可以使用索引號訪問列表的元素帶有文本「一個字符串」的跨度。然而,訪問列表元素的最安全的方法是使用foreach循環。

+0

不過,請注意$ foo.add(53);在文檔中呈現「真」或「虛假」。爲了防止你需要將它包裝在#if中。 – sproketboy 2015-06-08 15:30:29

+0

答案中已經涵蓋了渲染真假的例子。 – 2015-06-09 13:03:04

+0

噢,對不起。我才發現。你可以使用add方法和返回void的index參數。 – sproketboy 2015-06-10 15:01:34

3

創建磁盤陣列易於:

#set($array = []) 

把一個元素的數組也很容易:

$array.add(23) 

獲取元素從一個數組從您的速度取決於版本。 速度1。6,你必須使用

$array.get($index) 

由於速度1.7,你可以使用經典形式:

$array[$index]