2014-11-17 187 views
0

我定义了一个FreeMarker的功能,如:如何定义自由标记函数?

<#function ehtml str> 
    <#if (str??) > 
     <#return str?html> 
    <#else> 
     <#return ""> 
    </#if> 
</#function> 

我尝试检查“STR”使用<#如果(STR?)>是不存在的,但它不工作。我仍然得到一个错误“所需的参数:没有指定str。”当参数为空时。

回答

2

由于str参数是根据该函数定义所要求的,它甚至不到达<#if str??>线(顺便说一句即()是冗余的存在)。现在唯一不需要的方法是为其提供默认值,如<#function ehtml str=''>。所以实际上这个函数可以写成<#function ehtml str=''><#return str?html></#function>。事实上,最好的办法是如果你只写${foo!?html}你期望的null,而不是更长的${ehtml(foo)}。这就是为什么FTL毕竟拥有maybeNull!/maybeNull!default运营商。那么你不需要这个功能。