2011-01-10 66 views
6

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

回答

4

最終我做到了這樣的:

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

由於Freemarker的並沒有真正處理空值相當不錯。 我也使用params上的?has_content來檢查是否有內容。其他參數跳棋並不總是處理空值以及任何所以我建議是這樣的:

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

只是要確定。

+0

事情是,當參數爲空時,它甚至不在函數內部。它只是在調用該函數時拋出異常。這些檢查不會被調用。 – 2011-01-14 08:22:36

7

下面是我做什麼,這似乎在大多數情況下工作:

默認值應爲空字符串,以及空檢查應has_content

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