Freemarker - 将一个对象打印到另一个对象中

Freemarker - print an object into another object

我目前正在使用 FreeMarker Java 模板引擎 (.ftl)

我有一个配置文件对象,我想打印到另一个 ftl 文件中 (OutputScript.ftl)

这是我的 config.ftl

<#assign config = {
"hp": {
    "product" : {
        "title": {
            "top": "true",
            "bottom": "false"
        }
    }
}
} />

这是我的 OutputScript.ftl

<script>
window.object = {
    config : {
        // write the config object inside
    }
}
</script>

我已经设置了一个页面 (page.ftl),我在其中调用了两个文件

<#import "/config/config.ftl" as config />
<#attempt><#include "XXX/OutputScript.ftl" /><#recover><!--Error: module OutputScript.ftl ${.error}--></#attempt>

目前,我无法打印出来。 我试过这样的东西但没有任何运气

          <#if config.config.hp??>
            <#list config.config.hp as page>
                ${key}: ${page[key]}
            </#list>
        </#if>

另外,我们可以让它动态化吗?(如果我的配置文件有更多的缩进,它还能工作吗?)

谢谢

您不能直接使用 ${} 打印地图(“散列”),只能打印字符串、数字、date/time 或布尔值。所以如果要生成JSON,就得写宏,递归遍历打印数据结构

为了使用 ?eval_json

我已经将 Freemarker 更新到最新版本
<#assign config = '{
    "test" :"testValue",
    "hp": {
        "product" : {
            "title": {
                "top": {
                    "header": {
                        "big": "true",
                        "test" : 14
                    },
                    "header2": {
                        "big2": "true2"
                    },
                    "header3" : "true3"
                }
            }
        }
    }
}'>

<#assign configRedux = config?eval_json>