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

Liferay Velocity Structure and Template. Repeatable Fields

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

levelOne
    levelTwo
        levelThree

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

即使我只是从 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中没有显示重复数据的信息。有谁知道这是浪费时间来弄清楚还是我遗漏了什么?

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

这就是像 #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 是否有问题?

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

好的。解决方法如下..

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