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

use*_*002 60 freemarker

freemarker中的以下内容有什么区别?

!
has_content
?? 
if_exists
Run Code Online (Sandbox Code Playgroud)

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

我用的时候

!(xyz.abc!)?? -- it dint work
Run Code Online (Sandbox Code Playgroud)

我用的时候

!(xyz.abc!)?has_content ... it did work 
Run Code Online (Sandbox Code Playgroud)

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

dde*_*any 134

??告诉左手操作数的值是否缺失(表示它是Java null还是你有一个未定义的变量),并相应地返回false(丢失)或true(不丢失).

?has_content非常类似??,除了它还返回false0长度字符串或空FTL序列(如java.util.ListJava数组等)或空FTL散列(如java.util.Map等).(它不返回falsea 0,boolean false等)

!用于在缺少值时给出默认值(再次表示它是Java null或者您有一个未定义的变量),例如color!"no color".如果省略的右手操作数!,那么默认值是在同一时间一个空字符串和空序列和空哈希(多输入值),这是非常方便的写作之类的东西<#list things! as thing>,${foo!}.

?if_exists是旧的写作方式??.不要使用它.

虽然我们在这里,但请注意,所有这些运算符仅涵盖虚线或[]表达式的最后一步,例如user.price!0price缺少句柄if user,但如果user缺少则不会.为了涵盖两种可能性,使用(user.price)!0,它处理在评估过程中抛出的所有缺失的变量错误(),无论它们来自何处.

  • "记录良好"的声明值得一些链接:) [has_content](http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_has_content),[默认值运算符!](http://freemarker.org/docs/dgui_template_exp. html#dgui_template_exp_missing_default),[缺失值测试??](http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing_test)和[旧样式if_exists](http://freemarker.org/docs/dgui_template_exp.html #dgui_template_exp_missing) (19认同)
  • @shareef 如果只有 `buyer` 可以缺失,但如果它存在,那么 `company` 总是存在,然后 `&lt;#elseif Buyer??&gt;`,否则 `&lt;#elseif (buyer.company)??&gt;`或 `&lt;#elseif (buyer.company)?has_content&gt;`。`()` 使存在处理程序运算符覆盖整个表达式。 (2认同)