【问题标题】:Play 2.x null-safe coalescing (avoiding NPEs in templates)播放 2.x 空安全合并(避免模板中的 NPE)
【发布时间】:2012-07-10 07:44:45
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

这里已经有许多与 null 处理相关的问题和答案,因此我将只专注于您的 Play-2 相关问题。

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

@import some.package._

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-29
    • 2021-05-15
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2019-08-20
    相关资源
    最近更新 更多