You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Freemarker模板中innerNode对应else子句未执行问题求助

问题根因

你代码中的判断条件逻辑错误:你当前写的innerNode?size != 0是尝试获取innerNode节点对象本身的长度,而非你实际想要判断的innerNode.children子节点集合的长度。同理外层的outerNode?size !=0也存在相同的逻辑错误。
因为innerNode是你自定义的Java节点对象,只有当该对象本身实现了对应返回集合长度的size()方法时,这个判断才会符合你的预期,否则该判断的返回结果和子节点集合是否为空完全无关,自然无法触发对应else分支。

修复方案

把两个层级的判断条件都替换为对应子节点集合的长度判断即可:

<dyxml:root>
    <#list nodes as outerNode>
    <dyxml:node id="${outerNode.getNodeId()}" name="${outerNode.title}">
        <!-- 修正为判断outerNode的children集合长度 -->
        <#if outerNode.children?size !=0>
            <#list outerNode.children as innerNode>
            <dyxml:node id="${innerNode.getNodeId()}" name="${innerNode.title}">
                <!-- 修正为判断innerNode的children集合长度 -->
                <#if innerNode.children?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>

补充优化建议

可以额外增加非空判断,避免子节点集合为null时模板渲染报错:

<!-- 先判断children是否存在,再判断是否有内容,兼容性更好 -->
<#if outerNode.children?? && outerNode.children?has_content>

内容的提问来源于stack exchange,提问作者Edmund Fitzgerald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:00:03