当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何检查FreeMarker模板中是否存在变量?》经验,为你挑选了3个好方法。

我有一个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是否存在的方法,那么我可以避免添加这个额外的变量.



1> Ulf Lindback..:

要检查值是否存在:

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

或者使用标准的freemarker语法:

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

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

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


这只检查var是否存在.但是如果"userName"中有一个空字符串,<#if userName ??>将返回true!请参阅此页面上的@ user1546081应答以解决此问题.

2> 小智..:

这个似乎更合适:

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

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


必须对此进行downvote,因为它在技术上是不正确的,并且如果变量*存在*(op想要检查)但是为空,将导致意外(假阴性)行为.
似乎检查var是否存在以及它的内容是否为null或为空(在此处引用空字符串).

3> Ulf Lindback..:

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

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有