Java FreeMarker:检查映射值是否为空

Java FreeMarker:检查映射值是否为空,java,templates,freemarker,Java,Templates,Freemarker,我有一个映射,它的键和值以及自定义类。键类称为Position,并用两个int(例如newposition(2,4))实例化 我去掉了这个Position类,并将映射转换为一个SimpleHash,以便与Freemarker一起使用。我现在有了一个SimpleHash,它的键是一个字符串,用于重新映射位置值(例如“2 4”),它的值是null或Lot(自定义)类 在模板中,我需要检查SimpleMap中给定项的值(作为map传递)是null还是Lot实例 <#list ma

我有一个映射,它的键和值以及自定义类。键类称为
Position
,并用两个int(例如
newposition(2,4)
)实例化

我去掉了这个Position类,并将映射转换为一个
SimpleHash
,以便与Freemarker一起使用。我现在有了一个
SimpleHash
,它的键是一个字符串,用于重新映射位置值(例如
“2 4”
),它的值是
null
Lot
(自定义)类

在模板中,我需要检查SimpleMap中给定项的值(作为
map
传递)是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>

${x},${y}

如何做到这一点?

因为freemarker在涉及空值时有点奇怪,所以有两种方法可以解决它。 1.将其视为缺失值:

${map[x + " " + y]!}
   do Stuff
${map[x + " " + y]!}
2.只需将该支票转换为真/假支票即可。 这可以通过使用带有isNull(objectobj)函数的实用程序类来实现

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

使用
操作符

<#if map[x + " " + y]??>It's not null<#else>It's null or missing</#if>
它不是空的它是空的或丢失的

另请参见。

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