Templates Play 2.x空安全合并(避免模板中的NPE)

Templates Play 2.x空安全合并(避免模板中的NPE),templates,scala,playframework-2.0,null-coalescing-operator,Templates,Scala,Playframework 2.0,Null Coalescing Operator,在Play 1.x中,您可以执行类似于和{task?.server?.name}的操作来打印服务器名称(如果它存在),或者如果task或task.server为空,则不打印任何内容。如何在2.x scala模板中获得相同的结果 我发现了一些关于使用Scala执行此操作的问题: 但这些解决方案要么相当冗长,要么需要定义自己的运算符。游戏是否提供了一种快速的方法来实现这一点?或者如果我需要自己定义操作符,我应该把它放在哪里,以便Play找到它?(目前我对Scala几乎一无所知,尽管我正在努力

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

我发现了一些关于使用Scala执行此操作的问题:


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

这里已经有很多与空处理相关的问题和答案,因此我将只关注与Play-2相关的问题

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

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


通常的良好实践警告仍然适用:尝试仅在与java的互操作中使用null。在scala中,您更喜欢使用选项和None,而不是null。您可以在这里查看: