【问题标题】:Freemarker Template else clause not getting executedFreemarker 模板 else 子句没有被执行
【发布时间】: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


【解决方案1】:

问题肯定是#if 条件使用outerNode?size 而不是outerNode.children?size,而您列出的是outerNode.children

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多