2011-01-10 10 views
6

Ich habe Funktion in Freemarker leer sein:Freemarker-Funktion mit dem Parameter, die

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

ich es so nennen: ${formatDate(object.someDate)}.

Es funktioniert alles, bis someDate Null ist. In diesem Fall bekomme ich eine Ausnahme:

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

Wie kann ich das tun? Ich möchte, dass die Funktion funktioniert, wenn Parameterwerte null sind.

Antwort

4

Am Ende habe ich es so tat:

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

Als Freemarker wirklich nicht über die Nullwerte recht gut verarbeitet. Ich benutze immer den? Has_content auf den Parametern, um zu prüfen, ob dort etwas ist. Die anderen Parameter Kontrolleure Griff nicht immer die Null-Wert gut entweder so würde ich so etwas wie dies vorschlagen:

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

nur um sicher zu sein.

+0

Die Sache ist, es geht nicht einmal in die Funktion, wenn der Parameter leer ist. Es löst nur die Ausnahme aus, wenn die Funktion aufgerufen wird. Diese Prüfungen werden nicht aufgerufen. –

7

Hier ist, was ich tat, was in den meisten Szenarien scheint zu funktionieren:

Der Standardwert sollte eine leere Zeichenfolge, und der Null-Check sollte seine has_content.

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