3

play-salatプラグインを使用してMongoDbから取得したFooオブジェクトのリストを含むオブジェクトがあります。Barモデルはこんな感じ。

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

コレクションを含むオプションをサポートしていないことに注意してください

代わりに試してください:

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 に答える