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

时间:2014-08-07 19:23:25

标签: 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 -->

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

根据您的需要,您可以使用其他类型来表示“缺失”值。

例如,如果您的myVariable通常是一个数字,请为其指定false,然后选中myVariable??,而不是检查myVariable!false?is_number。这将涵盖两种情况(不存在和“未设置”)。

${ (myVariable!false?is_number)?c }

<#assign myVariable = 12 >
${ (myVariable!false?is_number)?c }

<#assign myVariable = false >
${ (myVariable!false?is_number)?c }

结果:

false
12
false

Go try

答案 2 :(得分:2)

您可以为变量指定一个空字符串,如果已设置,请检查buit-in ?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")}

这将呈现:

bye
hi
bye