区别??? ,free_content,if_exists在freemarker中

时间:2014-05-08 20:43:51

标签: freemarker

freemarker中的以下内容有何区别?

!
has_content
?? 
if_exists
我用过?而不是has_content&它导致了如此巨大的问题。搞砸了我的一天。我真的需要弄清楚这件事。

当我使用

!(xyz.abc!)?? -- it dint work

当我使用

!(xyz.abc!)?has_content ... it did work 

不是吗?或has_content或if_exists检查相同的事情?

1 个答案:

答案 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期间抛出的所有缺失的变量错误,无论它们来自何处。