使用Velocity模板语言创建并迭代数组



如何在VTL中创建阵列并向阵列中添加内容?此外,如何通过索引检索数组的内容?

根据Apache Velocity用户指南,分配的右侧可以是类型

  • 变量引用
  • 列出项目
  • 字符串文字
  • 属性参考
  • 方法参考
  • 数字文字
  • ArrayList
  • 地图

您可以在ApacheVelocity模板中创建一个空列表,该列表将满足您对阵列的所有需求,并使用以下表达式:

#set($foo = [])

或初始化值:

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

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

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

但请注意,由于列表类型的Java.add()方法返回布尔值,当您向列表中添加元素时,Velocity将根据"add"函数的结果打印"true"或"false"。

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

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

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

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

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

创建数组很容易:

#set($array = [])

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

$array.add(23)

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

$array.get($index)

由于Velocity 1.7,您可以使用经典形式:

$array[$index]

我尚未在VTL中创建阵列,但已将阵列传递给VTL上下文并使用它们。在VTL中,不能通过索引检索数组内容,只能使用foreach,例如,此代码是从我的动态SQL生成VTL脚本中复制的:

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

由于这个原因,我们也不能有2D阵列。当我需要一个数组来在一行中存储2个对象时,我使用了定义一个新类并将该类的对象放入一维数组的变通方法。

相关内容

  • 没有找到相关文章

最新更新