Liferay速度结构和模板。可重复的字段

时间:2015-03-11 15:38:11

标签: templates liferay structure velocity

我使用的结构有点像这样,levelOne和levelTwo都是可重复的。

levelOne
    levelTwo
        levelThree

当使用foreach循环显示数据时,我似乎只能找到levelTwo和levelThree的第一个实例。我已经尝试了很多方法试图获取这些信息,但我开始怀疑它是否超出了Velocitys的能力。

即使我只是从levelOne获取数据并使用

显示所有数据
#foreach($i in $levelOne.getSiblings())
  <p>$i</p>
#end

我显示的所有内容都是

{name=levelOne, data=levelOneData, type=text, options=[],
levelTwo={name=levelTwo, data=levelTwoData, type=text, options=[],
levelThree={name=levelThree, data=levelThreeData, type=text, options=[]}}}

使用像这样的嵌套foreach

#foreach($i in $levelOne.getSiblings())
 #foreach($j in $i.getSiblings())
   <p>$j</p>
 #end
#end

我得到了相同的结果..

在levelTwo中没有显示有关重复数据的信息。有谁知道这是否是浪费时间试图找出或是否有我遗失的东西?

2 个答案:

答案 0 :(得分:2)

我希望我了解你的情况。 如果您需要知道变量存在多少兄弟,您可以使用$yourVar.getSiblings().size():它返回兄弟姐妹列表的大小。

这就是像#foreach($i in $levelOne.getSiblings())这样的代码有效的原因。

以下输出显示您只有一个兄弟(为了简化阅读,我将其缩进):

{
name=levelOne,
data=levelOneData,
type=text,
options=[],
levelTwo={
    name=levelTwo,
    data=levelTwoData,
    type=text,
    options=[],
    levelThree={
        name=levelThree,
        data=levelThreeData,
        type=text,
        options=[]}
    }
}

前进......我确信你可以使用Velocity中的嵌套列表和地图...所以我的第一个问题是:你确定你的变量里面有多个Leve2和Level3的实例吗? ?

为了更好地理解尝试修改您报告的第二部分代码

<p>$levelOne</p>
<hr />
#foreach($i in $levelOne.getSiblings())
    <p><strong>$i</strong></p>
    #foreach($j in $i.getSiblings())
        <p>$j</p>
    #end
    <hr />
#end

你现在看到了什么? 你的$i循环之前是否有可能出现问题?

但是(第二个问题)......如果我不太了解你的结构......你需要一些不同的东西......你知道Velocity变量的getChildren()方法吗?

答案 1 :(得分:0)

确定。解决方案如下..

#foreach($i in $levelOne.getSiblings())
  #foreach($j in $i.levelTwo.getSiblings())
    <p>$j</p>
  #end
#end