English 中文(简体)
如何在 FreeMarker 模板中检查变量是否存在?
原标题:
  • 时间:2008-11-20 20:21:42
  •  标签:

我有一个Freemarker模板,其中包含一些占位符,当模板被处理时提供值。如果提供了userName变量,我想有条件地包含模板的一部分,例如:

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

然而,FreeMarker手册似乎表明if_exists已经过时了,但我找不到其他方法来实现这一点。当然,我可以简单地提供一个额外的布尔变量isUserName,并像这样使用它:

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

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

最佳回答

检查值是否存在:

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

或者使用标准的Freemarker语法:

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

检查值是否存在且不为空:

<#if userName?has_content>
    Hi ${userName}, How are you?
</#if>
问题回答

这一个看起来更适合:

<#if userName?has_content>
... do something
</#if>

将此翻译为中文:http://freemarker.sourceforge.net/docs/ref_builtins_expert.html http://freemarker.sourceforge.net/docs/ref_builtins_expert.html

我认为 if_exists 被使用如下:

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

如果用户名为空也不会破坏,如果为空则结果将是:

Hi , How are you?

如果存在现在已经过时了,并已被替换为默认操作符! ,就像

Hi ${userName!}, How are you?

默认运算符也支持默认值,例如:

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

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

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

假设你想确保p不只是空格。那么在检查它是否有内容之前,您可以先将其修剪。

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

更新

请忽略我的建议 - 只需要使用has_content,因为它包含了空值检查。 p?? && p?has_contentp?has_content 等效,所以最好直接使用has_content

针对FreeMarker 2.3.7之前的版本

你不能使用??来处理缺失值,老的语法是:

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




相关问题
热门标签