FreeMarker:检查映射值是否为null

4

我有一个Map,其中键和值是自定义类。键类称为Position,使用两个int实例化(例如new Position(2, 4))。

我删除了这个Position类,并将该Map转换为SimpleHash,以便与Freemarker一起使用。现在,我有一个SimpleHash,其键是重新映射的Position值的String(例如"2 4"),其值为nullLot(自定义)类。

在模板中,我需要检查传递给map的SimpleMap中给定项的值是否为null或Lot实例。

        <#list mapMinY..mapMaxY as y>
            <tr>
                <#list mapMinX..mapMaxX as x>
                    <td>
                        <div>
                            <!-- Check if map[x + " " + y] is null -->
                            ${x}, ${y}
                        </div>
                    </td>
                </#list>
            </tr>
        </#list>

如何做到这一点?
2个回答

9
使用 ?? 运算符。
<#if map[x + " " + y]??>It's not null<#else>It's null or missing</#if>

请参考手册中相关的部分

1

由于freemarker在处理空值时有点奇怪,有两种解决方法。 1.将其视为缺失值:

${map[x + " " + y]!}
   do Stuff
${map[x + " " + y]!}

2. 只需将该检查转换为一个真/假检查即可。这可以通过使用一个带有isNull(Object obj)函数的实用程序类来完成。

utilClass.isNull(map[x + " " + y])==true

这里不需要自定义实用程序。 FreeMarker有相当多的专用运算符用于处理null/missing值(请参见下面的答案)。 (“== true”检查看起来也很奇怪...)utilClass.isNull也无法区分null和丢失的键,因为它基本上只是获取Map.get返回的内容,在两种情况下都是null。 - ddekany

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接