如何在freemarker中将null设置为变量

Pab*_*mez 9 freemarker

在任何问题上我找不到与此相关的任何内容,这是非常基本的,但我无法弄清楚.

所以我的问题是我不知道如何将null设置为freemarker中的变量.例:

${hi!"bye"}          <#-- Prints "bye" because hi is undefined -->
<#assign hi="hi">    <#-- Sets a value to the var hi -->
${hi!"bye"}          <#-- Prints "hi" because hi has a value -->
<#assign hi=null>    <#-- This does not work but is what I am looking for -->
${hi!"bye"}          <#-- I want it to print "bye" because hi should be undefined -->
Run Code Online (Sandbox Code Playgroud)

我有这个问题,因为我迭代一个列表并设置一个var,如果特定项的某些逻辑验证,然后检查var是否存在,但如果第一个项创建var,那么我将为其余的设置var列表中的项目.

dde*_*any 10

不,没有"取消分配",也没有nullFreeMarker存在的概念(至少到2.4.0,但无论如何都是遥远的).它只有缺失的变量(可能在技术上是a null,可能根本不存在)和那些存在的变量.我真的不明白为什么在你的情况下需要它.你能举例说明一下情况吗?

  • 是的,除了标准的"循环变量"之外,您不能拥有属于循环体的范围变量.但是,您可以定义一个`#macro`(不是`#function` ...这是一个错字),然后从循环内部调用它,在那里你可以有`#local`-s. (2认同)

Jas*_*ies 6

您可以为变量分配一个空字符串,并检查内置?has_content是否已设置:

${hi?has_content?then(hi, "bye")}
<#assign hi="hi">
${hi?has_content?then(hi, "bye")}
<#assign hi="">
${hi?has_content?then(hi, "bye")}
Run Code Online (Sandbox Code Playgroud)

这将呈现:

bye
hi
bye
Run Code Online (Sandbox Code Playgroud)