Функция Freemarker с параметром, который может быть пустым - PullRequest
7 голосов
/ 10 января 2011

Я создал функцию во 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.

Как я могу это сделать?Я хочу, чтобы функция работала, если значения параметров равны нулю.

Ответы [ 3 ]

10 голосов
/ 24 сентября 2012

Вот что я сделал, что, похоже, работает в большинстве сценариев:

Значением по умолчанию должна быть пустая строка , а проверка на ноль должна быть ? Has_content .

<#function someFunction optionalParam="" >
    <#if (optionalParam?has_content)>
        <#-- NOT NULL -->
    <#else>
        <#-- NULL -->
    </#if>
</#function>
5 голосов
/ 13 января 2011

В итоге я сделал это так:

<#function formatDate anyDate='notSet'>
    <#assign dateFormat = read_from_configuration() />
    <#if anyDate?is_date>
        <#return anyDate?string(dateFormat) />
    <#else >
        <#return '' />
    </#if>
</#function>
1 голос
/ 13 января 2011

Freemarker не очень хорошо обрабатывает нулевые значения.

Я всегда использую? Has_content в параметрах, чтобы проверить, есть ли что-то там. Другие средства проверки параметров также не всегда хорошо обрабатывают нулевое значение, поэтому я бы предложил что-то вроде этого:

<#if anyDate?has_content && anyDate?is_date>

просто чтобы быть уверенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...