ChatGPT解决这个技术问题 Extra ChatGPT

如何检查 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 是否存在,那么我可以避免添加这个额外的变量。


d
darckcrystale

要检查该值是否存在:

[#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 语法应该用小于和大于字符而不是括号括起来。例如:<#if userName??>
实际上可以使用这种语法,所以我只是按照问题的语法:见freemarker.sourceforge.net/docs/…
这仅检查 var 是否存在。但是如果“userName”中有一个空字符串,<#if userName??> 将返回 true !请参阅此页面上的 @user1546081 答案以解决此问题。
你好,有什么方法可以在没有“if”语句的情况下做 ${userName!?size} 吗?还有 ${user!.userName!?size}
u
user1546081

这个似乎更合适:

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

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


似乎检查 var 是否存在以及它的内容是否不为空或为空(此处指的是空字符串)。
必须对此投反对票,因为它在技术上是不正确的,并且如果变量存在(操作想要检查的内容)但为空,则会导致意外(假阴性)行为。
U
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?

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

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

默认值运算符不能用于计算布尔值。因此,它不能按操作请求在 if 语句中使用。
你好,有什么方法可以在没有“if”语句的情况下做 ${userName!?size} 吗?还有 ${user!.userName!?size}
J
Jake Toronto

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

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


P
Petter Friberg

对于 FreeMarker 2.3.7 之前的版本

您不能使用 ?? 处理缺失值,旧语法是:

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