我在Freemarker中创建了函数:
<#function formatDate anyDate> <#assign dateFormat = read_from_configuration() /> <#if anyDate??> <#return anyDate?date(dateFormat) /> <#else > <#return '' /> </#if> </#function>
我称之为:${formatDate(object.someDate)}
。
这一切都有效,直到someDate
为空。在那种情况下,我得到例外:
Error executing macro: formatDate required parameter: anyDate is not specified.
我该怎么做?如果参数值为null,我希望函数能够工作。
答案 0 :(得分:9)
这就是我所做的,这似乎适用于大多数情况:
默认值应为空字符串,空值检查应为?has_content 。
<#function someFunction optionalParam="" >
<#if (optionalParam?has_content)>
<#-- NOT NULL -->
<#else>
<#-- NULL -->
</#if>
</#function>
答案 1 :(得分:4)
最后我这样做了:
<#function formatDate anyDate='notSet'> <#assign dateFormat = read_from_configuration() /> <#if anyDate?is_date> <#return anyDate?string(dateFormat) /> <#else > <#return '' /> </#if> </#function>
答案 2 :(得分:1)
由于Freemarker并没有真正处理空值。 我总是在params上使用?has_content来检查那里是否有东西。其他参数检查器并不总是很好地处理空值,所以我建议像这样:
<#if anyDate?has_content && anyDate?is_date>
只是为了确定。