Play Framework:无法从application.conf读取URL

时间:2013-02-11 20:21:07

标签: playframework playframework-2.0

我需要为Play应用配置一些网址,因此我将其添加到application.conf

application.url="http://www.mydomain.com"
application.url.images="http://www.anotherdomain.com"
application.url.images.logo="${application.url.images}/logo.png"
...

以下是我在视图中用于访问上述条目的代码:

@(title: String)
@import play.api.Play.current

<!DOCTYPE html>

<html>
    ...

    <img src="@{ currrent.configuration.getString("application.url.images.logo") }" />

    ...
</html>

嗯...我疯了,因为每当我运行应用程序时,我总会收到以下错误消息:

/home/j3d/Projects/test-app/conf/application.conf: 14-19: application.url.images.logo has type OBJECT rather than STRING

有什么想法吗?我错过了什么吗?或者这是一个错误?

非常感谢。

1 个答案:

答案 0 :(得分:13)

Play中使用的Typesafe Configuration库中的配置代表类似JSON的结构。点表示法是用于创建嵌套对象(JSON中的{ ... })的语法糖。例如:

application.url="http://example.com"
application.images.logo="http://example.com/img/1.png"
application.images.header="http://example.com/img/3.png"

等同于以下JSON:

{
  "application": {
    "url": "http://example.com",
    "images": {
      "logo": "http://example.com/img/1.png",
      "header": "http://example.com/img/3.png"
    }
  }
}

在您的示例中,您首先将字符串分配给application.url,然后尝试向其添加键(url中的键application.url.images),就像它是JSON对象,而不是字符串。在这种情况下,我不知道Typesafe配置的确切行为,以及为什么在读取配置文件时不会立即引发错误。

尝试重新排列配置密钥的层次结构,即:

application.url.prefix="http://www.mydomain.com"
application.url.images.prefix="http://www.anotherdomain.com"
application.url.images.logo="${application.url.images}/logo.png"

此处application.url将是具有键prefiximages的对象,而application.url.images将是具有键prefixlogo的对象。< / p>