在任何问题上我找不到与此相关的任何内容,这是非常基本的,但我无法弄明白。
所以我的问题是我不知道如何将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对于列表中的其余项目。
答案 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
答案 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