【问题标题】:Difference between ?? , has_content , if_exists in freemarker之间的区别?? , has_content , if_exists 在 freemarker
【发布时间】:2014-06-26 10:59:38
【问题描述】:

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

!
has_content
?? 
if_exists

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

当我使用时

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

当我使用时

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

不是吗??或 has_content 或 if_exists 检查相同的东西?

【问题讨论】:

标签: freemarker


【解决方案1】:

?? 告诉左手操作数的值是否丢失(意味着它是 Java null 或者您在那里有一个未定义的变量),并相应地返回 false(丢失)或 true(未丢失)。

?has_content?? 非常相似,除了它还为长度为 0 的字符串或空 FTL 序列(如 java.util.List、Java 数组等)或空 FTL 哈希(如 @ 987654337@等)。 (对于 0、布尔值 false 等,它不会返回 false

! 用于在缺少值时提供默认值(再次表示它是 Java null 或者您有未定义的变量),例如 color!"no color"。如果省略! 的右手操作数,则默认值为空字符串和空序列以及同时的空哈希(多类型值),这对于编写<#list things! as thing>、@ 之类的东西很方便987654346@.

?if_exists?? 的旧写法。不要使用它。

当我们在这里时,请注意所有这些运算符仅涵盖点式或 [] 表达式的最后一步,例如 user.price!0 仅在 user 中缺少 price 时处理,但在 user 中不处理时不处理本身就不见了。要涵盖这两种可能性,请使用 (user.price)!0,它会处理在评估 () 期间抛出的所有缺失变量错误,无论它们来自何处。

【讨论】:

  • “有据可查”的声明值得一些链接 :) has_contentdefault value operator !missing value test??old style if_exists
  • ?has_content 总是有用的,除了值是 BooleanNumber 1/0 for yes/no
  • 如果此买家不在<#elseif buyer.company?has_content > 中,它会给出异常未定义如何检查买家是否存在,我尝试了以上所有方法!
  • @shareef 如果只有buyer 可以丢失,但如果它在那里,那么company 总是在那里,那么<#elseif buyer??>,否则<#elseif (buyer.company)??><#elseif (buyer.company)?has_content>() 使存在处理程序运算符覆盖整个表达式。
猜你喜欢
  • 2016-06-14
  • 2011-04-14
  • 2017-04-21
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2021-02-21
  • 2011-06-22
相关资源
最近更新 更多