我有一个对象Foo
,它包含一个对象列表Bar
,我使用play-salat插件从MongoDb中获得这些对象。模型看起来像这样。
case class Foo (
@Key("_id") id: ObjectId = new ObjectId,
bars: Option[List[Bar]] = None
)
case class Bar (
something: String
)
视图应该显示foo对象的列表。我传递一个类似的迭代器
@(foos: Iterator[Foo])
模板中显示数据的部分如下所示:
@foos.map { foo =>
<div class="foo">@foo.id</div>
@if(foo.bars != None) {
<ul>
@for( bar <- bars ) {
<li>@bar.something</li>
}
</ul>
}
}
这样做,我得到一个ClassCastException:
[ClassCastException: com.mongodb.BasicDBList cannot be cast to scala.collection.immutable.List]
我尝试了其他变体,比如这个
@for( i <- 0 to foo.bars.size - 1 ) {
<li>@foo.bars.get(i).something</li>
}
导致ClassCastException:
[ClassCastException: com.mongodb.BasicDBList cannot be cast to scala.collection.LinearSeqOptimized]
问题是,如何迭代mongodb对象列表?我想/希望某种转移对象是不必要的。
请注意,salat wiki不支持包含集合的Options。
尝试:
case class Foo (
@Key("_id") id: ObjectId = new ObjectId,
bars: List[Bar] = List()
)
Salat当前不支持包含集合的选项,即Option[List[T]]
。有关详细信息,请参阅此处:https://github.com/novus/salat/wiki/SupportedTypes
只需使用List
,要模拟"nothing",只需用List.empty[Bar]
初始化即可。