3

我有一个对象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 对象列表?我猜/希望不需要某种传输对象。

4

2 回答 2

4

请注意salat wiki,它不支持包含集合的选项。

请尝试:

case class Foo (
  @Key("_id") id: ObjectId = new ObjectId,
  bars: List[Bar] = List()
)
于 2012-08-18T15:01:19.097 回答
2

包含集合的选项,即Option[List[T]]Salat 目前不支持。有关更多信息,请参见此处:https ://github.com/novus/salat/wiki/SupportedTypes

只需使用List, 并模拟“无”,只需使用List.empty[Bar].

于 2012-08-18T14:59:43.570 回答