如何在VTL中创建数组并向数组中添加内容?如何通过索引检索数组的内容?
答案 0 :(得分:45)
根据Apache Velocity User Guide,作业的右侧可以是
类型您可以在Apache Velocity模板中使用以下表达式创建一个空列表,以满足您对阵列的所有需求:
#set($foo = [])
或初始化值:
#set($foo = [42, "a string", 21, $myVar])
然后,使用Java add方法添加元素:
$foo.add(53);
$foo.add("another string");
但要注意,因为列表类型的Java .add()方法返回一个布尔值,当您向列表中添加元素时,Velocity将根据结果打印,例如“true”或“false” “添加”功能。
一个简单的解决方法是将add函数的结果赋给变量:
#set($bar = $foo.add(42))
您可以使用索引号访问列表中的元素:
<span>$foo[1]</span>
上面的表达式将显示带有文本“a string”的跨度。但是,访问列表元素的最安全方法是使用foreach循环。
答案 1 :(得分:7)
创建数组非常简单:
#set($array = [])
将元素放入数组也很容易:
$array.add(23)
从数组中获取元素取决于您的Velocity版本。 在Velocity 1.6中你必须使用
$array.get($index)
自Velocity 1.7起,您可以使用经典形式:
$array[$index]
答案 2 :(得分:1)
我没有在VTL中创建数组,但是将数组传递给VTL上下文并使用它们。在VTL中,您无法通过索引检索数组内容,您只使用foreach,例如,此代码是从我的动态SQL生成VTL脚本中复制的:
#foreach( $col in $Columns ) SUM($col.DBColumn) AS ''$col.Name''#if($velocityCount!=$Columns.Count), #end #end
出于这个原因,我们也不能拥有2D数组。当我需要一个数组来连续存储2个对象时,我使用了定义新类的方法,并将该类的对象放在单维数组中。