我需要为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
有什么想法吗?我错过了什么吗?或者这是一个错误?
非常感谢。
答案 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
将是具有键prefix
和images
的对象,而application.url.images
将是具有键prefix
和logo
的对象。< / p>