43

如何在 VTL 中创建数组并将内容添加到数组中?另外如何通过索引检索数组的内容?

4

3 回答 3

61

根据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 将根据“添加”功能。

一个简单的解决方法是将 add 函数的结果分配给一个变量:

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

您可以使用索引号访问列表的元素:

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

上面的表达式将显示一个带有文本“a string”的跨度。然而,访问列表元素的最安全方法是使用 foreach 循环。

于 2012-07-27T07:04:29.703 回答
13

创建数组很简单:

#set($array = [])

将元素放入数组也很容易:

$array.add(23)

从数组中获取元素取决于您的 Velocity 版本。在 Velocity 1.6 中,您必须使用

$array.get($index)

从 Velocity 1.7 开始,您可以使用经典形式:

$array[$index]
于 2016-06-30T07:59:22.887 回答
1

我没有在 VTL 中创建数组,而是将数组传递给 VTL 上下文并使用它们。在 VTL 中,不能按索引检索数组内容,只能使用 foreach,例如,此代码是从我的 Dynamic SQL 生成 VTL 脚本中复制的:

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

出于这个原因,我们也不能有二维数组。当我需要一个数组来连续存储 2 个对象时,我使用了定义一个新类并将该类的对象放在一维数组中的解决方法。

于 2011-07-12T18:47:51.500 回答