Freemarker函数,参数可以为空

时间:2011-01-10 10:29:53

标签: java freemarker

我在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,我希望函数能够工作。

3 个答案:

答案 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>

只是为了确定。