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
我使用的结构有点像这样,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