如何检查FreeMarker模板中是否存在变量?

时间:2008-11-20 20:21:42

标签: java templates freemarker

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

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

但是,FreeMarker手册似乎表明if_exists已被弃用,但我找不到另一种方法来实现这一点。当然,我可以简单地提供一个额外的布尔变量isUserName并使用如下:

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

但如果有办法检查userName是否存在,那么我可以避免添加这个额外的变量。

5 个答案:

答案 0 :(得分:264)

检查值是否存在:

[#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>

答案 1 :(得分:90)

这个似乎更合适:

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

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html

答案 2 :(得分:63)

我认为 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?

答案 3 :(得分:2)

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

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

我们假设您要确保p不仅仅是空格。然后你可以修剪它,然后检查它是否has_content

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

<强>更新

请忽略我的建议 - 只需要has_content,因为它会与空检查一起进行空检查。执行p?? && p?has_content相当于p?has_content,因此您也可以使用has_content

答案 4 :(得分:2)

  

对于FreeMarker 2.3.7之前的版本

您无法使用??来处理缺失值,旧语法为:

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