2011-01-10 41 views
6

creé función en Freemarker:función Freemarker con el parámetro que puede estar vacío

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

lo llamo así: ${formatDate(object.someDate)}.

Todo funciona hasta que someDate es nulo. En ese caso tengo una excepción:

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

¿Cómo puedo hacer esto? Quiero que la función funcione si los valores de los parámetros son nulos.

Respuesta

4

Al final lo hice así:

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

Como Freemarker en realidad no se ocupa de los valores nulos bastante bien. Siempre siempre uso el contenido "has_content" en los params para verificar si hay algo allí. Las otras damas de parámetros no siempre manejan el valor nulo bien tampoco, así que sugiero algo como esto:

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

sólo para estar seguro.

+0

Lo que pasa es que ni siquiera entra dentro de la función cuando el parámetro está vacío. Simplemente arroja la excepción al invocar la función. Esos cheques no serán llamados. –

7

Aquí es lo que hice, que parece funcionar en la mayoría de escenarios:?

El valor por defecto debería ser una cadena vacía , y el nulo cheque debe ser has_content.

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