【问题标题】:Accessing ArrayList by index using Velocity Templates使用 Velocity 模板按索引访问 ArrayList
【发布时间】:2017-04-23 22:13:40
【问题描述】:

我正在传递一个带有字符串映射到 ArrayList 的 HashMap。 该地图包含两个条目,它们是相同长度的 ArrayList,我希望它们水平对齐,所以我认为 foreach-range 循环比单独的条目上的 foreach 循环更好。

我有:

#foreach($i in [1..$entry1.size()])
    <li>
        <h3>$entry1.get($i-1)</h3>
        <video width="320" height="240" controls>
            <source src="$entry2.get($i-1)" type="video/mp4">
        </video>
    </li>
#end

Velocity 只是打印 $entry1.get($i-1) 并按字面意思计算 $entry1.size() 次 $entry2.get($i-1),而不是从相应的 ArrayList 索引中注入值。

速度Documentation 说:

注意:对于 ArrayList 示例,使用 [..] 运算符定义的元素可以使用 ArrayList 类中定义的方法进行访问。因此,例如,您可以使用 $monkey.Say.get(0) 访问上面的第一个元素。

例子是:

#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList

我是否正确访问了 ArrayList?

【问题讨论】:

  • 我认为你需要在破折号之前和之后放置空格,以便减法工作。另请参阅this

标签: java arraylist velocity


【解决方案1】:

我注意到,velocity 没有评估 get() 方法中的表达式 $entry1.get($i-1)

试试这样的:

#foreach($i in [1..$entry1.size()])
    #set($index = $i - 1)
    <li>
        <h3>$entry1.get($index)</h3>
        <video width="320" height="240" controls>
            <source src="$entry2.get($index)" type="video/mp4">
        </video>
    </li>
#end

【讨论】:

    【解决方案2】:

    所以,我仍然不确定我上面的代码有什么问题...... 这是我的解决方法:

    #foreach( $title in $entry1 )
      <li>
        <h3>$title</h3>
        <video width="320" height="240" controls>
          <source src="$entry2.get($foreach.index)" type="video/mp4">
        </video>
      </li>
    #end
    

    希望它对将来可能遇到类似问题的任何人有所帮助。 不过还是想知道我的初始代码出了什么问题!

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 2010-09-13
      • 2023-03-20
      • 2019-07-29
      • 1970-01-01
      • 2010-10-02
      • 2019-08-01
      • 2011-04-23
      • 1970-01-01
      相关资源
      最近更新 更多