freemarker中的以下内容有何区别?
!
has_content
??
if_exists
我用过?而不是has_content&它导致了如此巨大的问题。搞砸了我的一天。我真的需要弄清楚这件事。
当我使用
时!(xyz.abc!)?? -- it dint work
当我使用
时!(xyz.abc!)?has_content ... it did work
不是吗?或has_content或if_exists检查相同的事情?
答案 0 :(得分:121)
??
告诉左手操作数的值是否缺失(表示它是Java null
还是你有一个未定义的变量),并返回{{1}相应地(缺少)或false
(不缺失)。
true
与?has_content
非常相似,除了它还为0长度字符串或空FTL序列(如??
,Java数组等)返回false
。 )或空FTL哈希(如java.util.List
等)。 (它不会为java.util.Map
,布尔false
等返回0
。
false
用于在缺少值时给出默认值(再次表示它是Java !
或者您有一个未定义的变量),例如null
。如果省略color!"no color"
的右手操作数,则默认值为空字符串,空序列和空哈希同时(多类型值),这对于编写{{1}这样的内容很方便},!
。
<#list things! as thing>
是写${foo!}
的旧方法。不要使用它。
当我们在这里时,请注意所有这些运算符仅涵盖虚线或?if_exists
表达式的最后一步,如??
仅处理[]
user.price!0
},但不是price
本身缺失。为了涵盖这两种可能性,请使用user
,它处理在评估user
期间抛出的所有缺失的变量错误,无论它们来自何处。