【问题标题】:Create and iterate through an array in Velocity Template Language在 Velocity 模板语言中创建和遍历数组
【发布时间】:2011-09-01 16:40:32
【问题描述】:

如何在VTL中创建一个数组并向数组中添加内容?还有如何通过索引检索数组的内容?

【问题讨论】:

    标签: vtl


    【解决方案1】:

    创建数组很简单:

    #set($array = [])
    

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

    $array.add(23)
    

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

    $array.get($index)
    

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

    $array[$index]
    

    【讨论】:

      【解决方案2】:

      根据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 循环。

      【讨论】:

      • 请注意 $foo.add(53);在文档中呈现“真”或“假”。为防止这种情况发生,您需要将其包装在 #if 中。
      • 答案中已经涵盖了呈现真假的情况。
      • 哦,对不起。我才发现。您可以将 add 方法与返回 void 的 index 参数一起使用。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-08-03
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 2016-05-30
        • 1970-01-01
        相关资源
        最近更新 更多