2011-01-10 16 views
6

stworzyłem funkcję w Freemarker:funkcja Freemarker z parametrem, który może być pusty

 
<#function formatDate anyDate> 
    <#assign dateFormat = read_from_configuration() /> 
    <#if anyDate??> 
     <#return anyDate?date(dateFormat) /> 
    <#else > 
     <#return '' /> 
    </#if> 
</#function> 

nazywam go tak: ${formatDate(object.someDate)}.

Wszystko działa do momentu, gdy someDate ma wartość null. W takim przypadku otrzymuję wyjątek:

 
Error executing macro: formatDate 
required parameter: anyDate is not specified. 

Jak mogę to zrobić? Chcę, aby funkcja działała, jeśli wartości parametrów są zerowe.

Odpowiedz

4

W końcu zrobiłem to tak:

 
<#function formatDate anyDate='notSet'> 
    <#assign dateFormat = read_from_configuration() /> 
    <#if anyDate?is_date> 
     <#return anyDate?string(dateFormat) /> 
    <#else > 
     <#return '' /> 
    </#if> 
</#function> 
1

Jak Freemarker naprawdę nie obsługuje wartości null całkiem dobrze. Zawsze używam opcji? Has_content w parametrach, aby sprawdzić, czy coś tam jest. Pozostałe kontrolery parametrów nie zawsze obsłużyć wartość null dobrze albo więc proponuję coś takiego:

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

tylko aby się upewnić.

+0

Chodzi o to, że nawet nie wchodzi do funkcji, gdy parametr jest pusty. Po prostu wywołuje wyjątek podczas wywoływania funkcji. Kontrole te nie będą wywoływane. –

7

Oto co zrobiłem, co wydaje się działać w większości scenariuszy:

Domyślna wartość powinna być pusty ciąg, a null Test powinien być has_content.

<#function someFunction optionalParam="" > 
    <#if (optionalParam?has_content)> 
     <#-- NOT NULL --> 
    <#else> 
     <#-- NULL --> 
    </#if> 
</#function> 
Powiązane problemy