Это мое первое приложение для игры 2.0, а scala все еще довольно нова для меня, поэтому я, вероятно, ошибаюсь. Я использую довольно новый плагин, который связывает Salat и Casbah: https://github.com/leon/play-salatИграйте! framework 2.0 scala - ClassCastException: models.MyModel нельзя отнести к моделям.MyModel
Я упростил и переименовал все, чтобы сделать его общим.
Мое мнение (views/MyController/search.scala.html
):
@(modelList:List[models.MyModel])
@main(title = "Search MyModel") {
<table>
@for(a <- modelList) {
<tr><td>@a.field<td>@a.field2</li>
}
</table>
}
Мой контроллер (controllers/MyController.scala
):
package controllers
import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import com.mongodb.casbah.Imports._
import models._
object MyController extends Controller {
def search = Action {
val modelList = MyModel.all.toList;
Ok(views.html.MyController.search(modelList))
}
}
Моя модель: (models/MyModel.scala
):
package models
import play.api.Play.current
import java.util.{Date}
import com.novus.salat._
import com.mongodb.casbah.Imports._
import se.radley.plugin.mongodb._
import se.radley.plugin.mongodb.salat._
case class MyModel(
id: ObjectId = new ObjectId,
field: String,
field2: String
)
object MyModel extends SalatDAO[MyModel, ObjectId](collection = getCollection("mycollection")) {
def all = find(MongoDBObject())
}
И я получаю это ошибка:
ClassCastException: models.MyModel cannot be cast to models.MyModel
Что для меня не имеет смысла - кто-нибудь сталкивается с чем-то подобным?
Полный трассировки стека:
play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[ClassCastException: models.MyModel cannot be cast to models.MyModel]]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:82) [play_2.9.1.jar:2.0]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:63) [play_2.9.1.jar:2.0]
at akka.actor.Actor$class.apply(Actor.scala:290) [akka-actor.jar:2.0]
at play.core.ActionInvoker.apply(Invoker.scala:61) [play_2.9.1.jar:2.0]
at akka.actor.ActorCell.invoke(ActorCell.scala:617) [akka-actor.jar:2.0]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:179) [akka-actor.jar:2.0]
Caused by: java.lang.ClassCastException: models.MyModel cannot be cast to models.MyModel
at views.html.MyController.search$$anonfun$apply$1.apply(search.template.scala:25) ~[classes/:na]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.2]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.2]
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) ~[scala-library.jar:0.11.2]
at scala.collection.immutable.List.foreach(List.scala:45) ~[scala-library.jar:0.11.2]
at scala.collection.TraversableLike$class.map(TraversableLike.scala:194) ~[scala-library.jar:0.11.2]
Да, я подозревал, что это могло быть что-то с компаньоном, но пример показывает такую конфигурацию (https://github.com/leon/play-mongodb/blob/master/sample/app/models/ User.scala). Я сделал ваше изменение и получил ту же ошибку - в итоге мне пришлось перезапустить Play !, по-видимому, он не перекомпилирует эту штуку должным образом. В любом случае, спасибо большое! –
Нет проблем. Рад, что это было простое решение. –
Мое плохое, я совершенно новый для scala, не думаю, что было бы важно, чтобы вы поместили методы DAO внутри объекта-компаньона. Я думал, что все это будет скомпилировано до статического класса. Я изменю документацию. –