播放2.x无效安全合并(避免模板中的NPE)

时间:2012-07-10 18:53:27

标签: templates scala playframework-2.0 null-coalescing-operator

在Play 1.x中,您可以执行&{task?.server?.name}之类的操作来打印服务器名称(如果存在),或者如果tasktask.server为空则不打印任何内容。如何在2.x scala模板中获得相同的结果?

我发现了一些关于Scala的一般性问题:

但这些解决方案要么相当冗长,要么需要定义自己的运算符。 Play提供了一种快速的方法吗?或者,如果我需要自己定义操作符,我应该在哪里放置它以便Play找到它? (此时我对Scala几乎一无所知,尽管我正在努力学习)

1 个答案:

答案 0 :(得分:0)

这里有许多与空处理相关的问题和答案,所以我只关注你的Play-2相关问题。

我做了一个快速测试,似乎模板系统将空值的直接解除引用转换为空字符串。如果您尝试在作为null传入的对象上调用某个方法,则仍然无法从NPE中保存。为此,您需要使用所有其他答案中描述的一些方法。如果您定义了一个新的操作符,您可以将它放在您喜欢的任何包中,然后将此行添加到您的模板中:

@import some.package._

这将使some.package中的所有内容都可以在模板中访问。

通常的良好实践警告仍然适用:尝试仅在与java的互操作中使用空值。其他一切都有选择。