我定义了一个freemarker函数,例如:
<#function ehtml str>
<#if (str??) >
<#return str?html>
<#else>
<#return "">
</#if>
</#function>
我尝试使用&lt; #if(str ??)&gt;来检查'str'不存在,但它不起作用。我仍然收到错误“必需参数:str未指定”。当参数为空时。
答案 0 :(得分:2)
由于根据该功能定义需要str
参数,因此它甚至无法到达<#if str??>
行(()
冗余的BTW那里)。现在,使其成为非必需品的唯一方法是为其提供默认值,例如<#function ehtml str=''>
。所以实际上这个函数可以写成<#function ehtml str=''><#return str?html></#function>
。事实上,如果你只想写${foo!?html}
而不是更长的null
,那么最好的就是${ehtml(foo)}
。这就是为什么FTL毕竟拥有maybeNull!
/ maybeNull!default
运算符的原因。那么你就不需要这个功能了。