我已阅读此主题
并进行了一些更改,但仍然不知道如何在play框架中迭代conf文件。
Providers=[{1234 : "CProduct"},
{12345 : "ChProduct"},
{123 : "SProduct"}]
这是我的conf文件,名为providers.conf,问题是我如何迭代它们并从中创建一个下拉框。我想把它们作为地图,如果可能的话,这是[int,string]
我知道,我必须把它们当作
val config = ConfigFactory.load("providers.conf").getConfigList("Providers")
我可以像那样的conf文件但是,我应该从模板中获取它,为了做到这一点,我需要将它转换为hashmap或list或任何功能。
干杯,
答案 0 :(得分:5)
我不确定这是否是最有效的方法,但这有效:
1)让我们获取配置文件:
val config = ConfigFactory.load().getConfigList("providers")
scala> config.getConfigList("providers")
res23: java.util.List[_ <: com.typesafe.config.Config] = [Config(SimpleConfigObject({"id":"1234","name":" Product2"})), Config(SimpleConfigObject({"id":"4523","name":"Product1"})), Config(SimpleConfigObject({"id":"432","name":" Product3"}))]
2)对于此示例,请介绍Provider实体:
case class Provider(id: String, name: String)
3)现在让我们将带有配置的列表转换为提供者:
import scala.collection.JavaConversions._
providers.map(conf => Provider(conf.getString("id"), conf.getString("name"))).toList
res27: List[Provider] = List(Provider(1234, Product2), Provider(4523,Product1), Provider(432, Product3))
我们需要显式转换它toList
,因为默认情况下Java List转换为Buffer。
答案 1 :(得分:0)
这是我的解决方案,
val config = ConfigFactory.load("providers.conf").getConfigList("Providers")
var providerlist = new java.util.ArrayList[model.Provider]
val providers = (0 until config.size())
providers foreach {
count =>
val iterator = config.get(count).entrySet().iterator()
while(iterator.hasNext()) {
val entry = iterator.next()
val p = new Provider(entry.getKey(), entry.getValue().render())
providerlist.add(p);
}
}
println(providerlist.get(0).providerId+providerlist.get(0).providerName)
println(providerlist.get(33).providerId+providerlist.get(33).providerName)
和我的provider.class
package model
case class Provider(providerId: String, providerName: String)