如何检查FreeMarker模板中是否存在variables?
我有一个Freemarker模板,其中包含一些处理模板时为其提供值的占位符。 我想有条件地包含模板的一部分,如果提供userNamevariables,如下所示:
[#if_exists userName] Hi ${userName}, How are you? [/#if_exists]
然而,FreeMarker手册似乎表明,if_exists已被弃用,但我找不到另一种方法来实现这一点。 当然,我可以简单地提供一个额外的布尔variablesisUserName,并使用如下所示:
[#if isUserName] Hi ${userName}, How are you? [/#if]
但是,如果有一种方法来检查userName是否存在,那么我可以避免添加这个额外的variables。
[#if userName??] Hi ${userName}, How are you? [/#if]
或者使用标准的freemarker语法:
<#if userName??> Hi ${userName}, How are you? </#if>
这似乎是一个更好的适合:
<#if userName?has_content> ... do something </#if>
http://freemarker.sourceforge.net/docs/ref_builtins_expert.html
另外我认为if_exists被使用如下:
Hi ${userName?if_exists}, How are you?
如果userName为null,则不会中断,如果为null,则结果为:
Hi , How are you?
if_exists现在已被弃用,并已被默认的操作符取代! 如在
Hi ${userName!}, How are you?
默认的运算符也支持一个默认值,比如:
Hi ${userName!"John Doe"}, How are you?
我想很多人都希望能够检查他们的variables是否不是空的以及是否存在。 我认为在很多情况下检查存在和空白是一个好主意,并且使你的模板更健壮,更不容易出现愚蠢的错误。 换句话说,如果你在使用它之前检查你的variables是否为空而不是空的,那么你的模板变得更加灵活,因为你可以把一个空variables或者一个空string引入它,在任一情况下。
<#if p?? && p?has_content>1</#if>
假设你想确保p
不仅仅是空格。 然后,您可以在检查它是否has_content
之前修剪它。
<#if p?? && p?trim?has_content>1</#if>
UPDATE
请忽略我的build议 – has_content
是所有需要的,因为它与空检查一起进行空检查。 做p?? && p?has_content
p?? && p?has_content
相当于p?has_content
,所以你可以直接使用has_content
。