Freemarker 模板 else 子句没有被执行
Posted
技术标签:
【中文标题】Freemarker 模板 else 子句没有被执行【英文标题】:Freemarker Template else clause not getting executed 【发布时间】:2021-11-07 03:57:47 【问题描述】:我正在使用 freemarker 模板引擎来创建 dyxml 包结构。在 Java 中,正在创建一个使用 ftl 呈现的树结构。我的 ftl 文件中有以下代码 -
<dyxml:root>
<#list nodes as outerNode>
<dyxml:node id="$outerNode.getNodeId()" name="$outerNode.title">
<#if outerNode?size !=0>
<#list outerNode.children as innerNode>
<dyxml:node id="$innerNode.getNodeId()" name="$innerNode.title">
<#if innerNode?size !=0>
<#list innerNode.children as grandChildNode>
<dyxml:node id="$grandChildNode.getNodeId()" name="$grandChildNode.title">
<dyxml:$grandChildNode.href.getDyxmlRefType() href="../$grandChildNode.href.getPath()"
tid="$grandChildNode.href.id" version="$grandChildNode.href.version" xml:lang="$grandChildNode.href.xmlLang"/>
</dyxml:node>
</#list>
<#else>
<dyxml:$innerNode.href.getDyxmlRefType() href="../$innerNode.href.getPath()" tid="$innerNode.href.id" version="$innerNode.href.version" xml:lang="$innerNode.href.xmlLang"/>
</#if>
</dyxml:node>
</#list>
<#else>
<dyxml:$outerNode.href.getDyxmlRefType() href="../$outerNode.href.getPath()" tid="$outerNode.href.id" version="$outerNode.href.version" xml:lang="$outerNode.href.xmlLang"/>
</#if>
</dyxml:node>
</#list>
</dyxml:root>
当 innerNode.children 的大小大于 0 时,将执行用于显示 grandChildNodes 的嵌套列表。但是,在 innerNode.children 大小为 0 的情况下,相应的 else 部分永远不会被执行。在创建的 xml 文件中没有呈现以下 else -
<#else>
<dyxml:$innerNode.href.getDyxmlRefType() href="../$innerNode.href.getPath()" tid="$innerNode.href.id" version="$innerNode.href.version" xml:lang="$innerNode.href.xmlLang"/>
</#if>
我已调试数据并验证了 innerNode.children 为 0 的情况,else 部分应该理想地执行。请让我知道我可能会错过什么。谢谢。
【问题讨论】:
与您的问题无关,但请注意,您可以而且应该简单地写innerNode.href.dyxmlRefType
,而不是innerNode.href.getDyxmlRefType()
。
【参考方案1】:
问题肯定是#if
条件使用outerNode?size
而不是outerNode.children?size
,而您列出的是outerNode.children
。
【讨论】:
以上是关于Freemarker 模板 else 子句没有被执行的主要内容,如果未能解决你的问题,请参考以下文章