2008-11-20 119 views
135

我有一个Freemarker模板,其中包含一组处理模板时为其提供值的占位符。我希望有条件地包括模板的一部分如果用户名变量提供,像:如何检查FreeMarker模板中是否存在变量?

[#if_exists userName] 
    Hi ${userName}, How are you? 
[/#if_exists] 

但是,FreeMarker的手册似乎表明if_exists已过时,但我不能找到另一种方式来实现这一目标。当然,我可以简单的提供一个额外的布尔变量isUserName和使用这样的:

[#if isUserName] 
    Hi ${userName}, How are you? 
[/#if] 

但是,如果有检查用户名是否存在,那么我能避免增加这一额外变量的方法。

回答

227
[#if userName??] 
    Hi ${userName}, How are you? 
[/#if] 

或以标准freemarker的语法:

<#if userName??> 
    Hi ${userName}, How are you? 
</#if> 
+1

如果有其他人被这个抛出,#if语法应该被小于和大于字符而不是括号包围。例如:<#if userName>> – Cameron 2010-03-17 18:23:39

+0

它实际上可以使用这种语法,所以我只是遵循这个问题的语法: 请参阅http://freemarker.sourceforge.net/docs/dgui_misc_alternativesyntax.html – 2010-03-18 07:52:55

+9

这只是检查var是否存在。但是,如果你在“userName”中有一个空字符串,那么<#if userName ??>将返回true!请参阅此页上的@ user1546081答案以解决此问题。 – 2013-01-15 10:22:46

55

而且我觉得if_exists使用,如:

Hi ${userName?if_exists}, How are you? 

如果用户名为空,不会打破,结果,如果null将是:

Hi , How are you? 

if_exists现在已被弃用,并已被默认操作符替换!在

Hi ${userName!}, How are you? 

的缺省操作还支持默认值,比如:

Hi ${userName!"John Doe"}, How are you? 
2

我想想很多人都希望能够检查他们的变量是否为空就好像它存在一样。我认为,在很多情况下检查存在和空白是一个好主意,并且可以使您的模板更加健壮,不易出现愚蠢的错误。换句话说,如果您在使用它之前检查以确保您的变量不为空且不为空,那么您的模板变得更加灵活,因为您可以向其中引入空变量或空字符串,并且它将工作相同在任一情况下。

<#if p?? && p?has_content>1</#if> 

比方说,你想确保p不仅仅是空白。然后,您可以在检查之前修剪它,看它是否为has_content

<#if p?? && p?trim?has_content>1</#if> 

UPDATE

请忽略我的建议 - has_content是所有需要,因为它与空管检查沿空检查。做p?? && p?has_content相当于p?has_content,所以你不妨使用has_content

相关问题