在 Freemarker 中将对象转换为字符串

cast Obbject to string in Freemarker

我正在尝试在 FREEMARKER 中打印地图的 value bay key 但出现异常

freemarker.core.NonStringException: Error on line 6, column 69 in internal_monitors.ftl 
Expecting a string, date or number here, Expression object[key] is instead a freemarker.template.SimpleSequence

这是我的代码

    <#if drives?exists>
<drives><#list drives as object>
    <drive>
    <#list object?keys as key>
        <${key}><#if object[key]?exists>${object[key]}<#else>null</#if></${key}>
    </#list>
    </drive></#list>
</drives>
</#if>

有什么想法吗?

  1. 使用 ?? 而不是 ?exists?exists 内置函数已弃用。

  2. 您必须检查 object[key] 值是否可显示(例如字符串、数字、日期...)或容器(哈希、序列)。在后一种情况下,您要么跳过它,要么迭代其内容:

    <#if drives??>
        <#list drives as object>
            <drive>
                <#list drive?keys as key>
                    <${key}>
                    <#if object[key]??>
                        <#if object[key]?is_hash>
                            HASH
                        <#elseif object[key]?is_sequence>
                            SEQUENCE
                        <#else>
                            ${object[key]}
                        </#if>
                    <#else>
                        null
                    </#if>
                    </${key}>
                </#list>
            </drive>
        </#list>
    </#if>