在Freemarker中处理空值


Answers:


96

您可以使用??测试运算符:

这将检查对象的属性是否不为null:

<#if object.attribute??></#if>

这检查对象或属性是否不为空:

<#if (object.attribute)??></#if>

资料来源:FreeMarker手册


1
这种方法和has_content有什么区别?
Anand B

2
has_content在null检查旁边,还会检查该值是否不为空。这适用于字符串,序列,哈希或集合。如果对象是日期,布尔值或数字,则它将作为非空对象。对于所有其他类型,它将作为空。
Tom Verelst

我有这个问题,我必须检查bean中的值是否为空。我尝试了以下操作:$ {checknull(Bean.getValue())},如果函数<#function checknull x> <#if x? ?> <#return“”> <#else> <#return x> </#if> </#function>但我收到“执行宏时出错:checknull必需参数:未指定x”。错误
Anand B

您必须反转返回值:<#function checknull x> <#if x ??> <#return x> <#else> <#return“”> </#if> </#function>
Tom Verelst


104

从freemarker 2.3.7开始,您可以使用以下语法

${(object.attribute)!}

或者,如果您想在属性为时显示默认文本null

${(object.attribute)!"default text"}

1
对于那些使用Freemarker作为XDocReport模板引擎的用户,将其添加<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.22</version></dependency>到pom.xml后可以使用。
Ludovic Guillaume

如果您有日期并且该日期可能为空,该怎么办?换句话说,object.dateAcquired,其中dateAcquired可以为null,并且您有$ {object.dateAcquired?date}
Stephane Grenier

1
@StephaneGrenier使用${(object.dateAcquired?date)!"not present"}
Tassos Bassoukos

1
很好的例子。帮助了我很多。但是,该支架已过时。 ${salutation!'Dear Mr. or Mrs.'}
Sim0rn

知道如何打印.now?默认默认值吗?
圣地亚哥阿切诺拉扎


1

??<#if>语句末尾使用运算符。

本示例演示了如何null在Freemaker模板中处理两个列表的值。

List of cars:
<#if cars??>
    <#list cars as car>${car.owner};</#list>
</#if>
List of motocycles:
<#if motocycles??>
    <#list motocycles as motocycle>${motocycle.owner};</#list>
</#if>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.