Liferay Velocity模板,循环通过数组

时间:2016-02-15 22:14:23

标签: liferay velocity

我创建了一个自定义Web内容结构,它采用数组作为唯一的输入(称为“theArray”)。类似的东西:

[
  ["vs303","The first Title","2","4","5","7"],
  ["vs606","The second Title","4","5","7","8"],
  ["vs808","The third Title","3","2","11","7"]
]

当我尝试在Velocity Template中循环遍历数组时,它没有显示任何内容:

#set ($foo = ${theArray.getData()})

#foreach ($bars in $foo)

  #foreach ($bar in $bars)
    <p>$bar</p>
  #end

#end

我哪里出错了?我是否需要将var声明为数组?

*注 如果将数组放在模板中,则循环起作用。如果我通过getData方法从liferay webcontent结构中获取数组,则不输出任何内容。

2 个答案:

答案 0 :(得分:1)

你可以像这样循环遍历数组(你不需要使用getData方法):

#set($foo = [
  ["vs303","The first Title","2","4","5","7"],
  ["vs606","The second Title","4","5","7","8"],
  ["vs808","The third Title","3","2","11","7"]
])

#foreach ($bars in $foo)
    #foreach ($bar in $bars)
        <p>$bar</p>
    #end
#end

答案 1 :(得分:0)

我从你的问题中理解的是1.&gt;当您在模板中设置数组时,因为保留了原始数组数据类型。 2 - ;当你使用你的getData()函数时,你可能会得到一个字符串,速度迭代器无法理解这就是为什么不工作。

我不确定getData()方法的实现,但您可以尝试:

1&GT;如果可能,使getData()的返回类型成为一个数组。

2 - ;如果这是不可能的。您可以创建一个静态方法将theArray.getData()Type转换为Array Type。将此方法设置为velocity上下文,并在模板中使用此静态方法。

             #set ($foo = ${STATIC_METHOD(theArray.getData())} )