【发布时间】: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()。
标签: java freemarker