使用Velocity Templates通过索引访问ArrayList

时间:2017-04-23 22:13:40

标签: java arraylist velocity

我正在将带有String映射的HashMap传递给ArrayList。 该映射包含两个条目,它们是相同长度的ArrayLists,我希望它们水平对齐,所以我认为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)并将$ entry2.get($ i-1)字面上为$ entry1.size()次,而不是从相应的ArrayList索引中注入值。

速度Documentation说:

  

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

示例是:

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

我是否正确访问了ArrayList?

2 个答案:

答案 0 :(得分:1)

所以,我仍然不确定上面的代码出了什么问题...... 这是我的工作:

#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

希望它可以帮助任何可能在未来遇到类似问题的人。 我仍然想知道我的初始代码有什么问题!

答案 1 :(得分:0)

我注意到,速度不是在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