j3d*_*j3d 8 scala playframework typesafe-config
在我的Play应用程序中,我有一个这样的配置:
social {
twitter {
url="https://twitter.com"
logo="images/twitter.png"
}
facebook {
url="https://www.facebook.com"
logo="images/facebook.png"
}
}
Run Code Online (Sandbox Code Playgroud)
我会迭代所有social条目以获取url和logo每个条目吗?
<table border="0" cellspacing="0" cellpadding="2"><tr>
@configuration.getConfig("social").map { config =>
@for(item <- config.entrySet) {
<td><a href="item.getString("url")">
<img src="@routes.Assets.at("item.getString("logo")").absoluteURL()" width="24" height="24"/></a></td>
}
}
</table>
Run Code Online (Sandbox Code Playgroud)
当然,item.getString在上面的片段中不起作用......它只是展示了我想要实现的目标.
最终目标是能够添加任何进一步的社交URL,而无需修改页面模板.
Paw*_*ski 11
如果您将配置更改为:
"social" : [
{
name="twitter",
url="https://twitter.com",
logo="images/twitter.png"
},
{
name="facebook",
url="https://www.facebook.com",
logo="images/facebook.png"
}
]
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
@(message: String)(implicit request: RequestHeader)
@import play.api.Play.current
<table border="0" cellspacing="0" cellpadding="2"><tr>
@current.configuration.getConfigList("social").get.map { config =>
<td><a href="@config.getString("url")">
<img src="@routes.Assets.at(config.getString("logo").get).absoluteURL()" width="24" height="24"/></a></td>
}
</table>
Run Code Online (Sandbox Code Playgroud)
对于后代,这是另一种迭代嵌套配置的方法.我更喜欢这种格式的数组,我宁愿让我的配置比代码更干净.
import collection.JavaConversions._
val socialConfig = ConfigFactory.load.getConfig("social")
socialConfig.root.map { case (name: String, configObject: ConfigObject) =>
val config = configObject.toConfig
println(config.getString("url"))
println(config.getString("logo"))
}
Run Code Online (Sandbox Code Playgroud)
我确信OP可以将其转换为Twirl模板.这就像我能得到它一样干净.
如果您使用 Java,则配置如下:
"social" : [
{
name="twitter",
url="https://twitter.com",
logo="images/twitter.png"
},
{
name="facebook",
url="https://www.facebook.com",
logo="images/facebook.png"
}
]
Run Code Online (Sandbox Code Playgroud)
这会起作用:
ConfigList socials = ConfigFactory().load.getList("social")
for (ConfigValue cv : socials) {
Config c = ((ConfigObject)cv).toConfig();
System.out.println(c.getString("url"));
System.out.println(c.getString("logo"));
}
Run Code Online (Sandbox Code Playgroud)