类型不匹配; found:Int required:尝试在播放框架中保存表单数据时的字符串

时间:2014-09-26 19:53:40

标签: scala web playframework

我的模型如下:

case class User(username: String, email: String) {
  var id:Int = User.nextId
}

object User {
    protected var currentId = 0

    def nextId: Int = {
      currentId += 1
      currentId
    }
}

我的控制器看起来像这样:

object Users extends Controller {

  val users: scala.collection.mutable.Map[String, User] = new HashMap

  val form = Form(
      mapping(
          "username" -> text,
          "email" -> text
      )(User.apply)(User.unapply))


  def add = Action {
    Ok(views.html.users.add(form))
  }

  def save = Action{ 
     implicit request =>
        val user = form.bindFromRequest.get         
        users.put(user.id, user)
        Ok("contact saved")
  }
}

但是当我编译代码时,我的浏览器会抛出一个错误,告知users.put(user.id, user)接受的类型中存在未匹配。

错误消息如下所示:

enter image description here

当我将id的类型更改为字符串然后它将工作但我想将我的id保持为整数而不是字符串。

我有什么办法可以做到这一点。我正在使用play framework 2.11.1。

我错过了什么。任何帮助都会非常感激,因为我是新手来玩框架。

1 个答案:

答案 0 :(得分:3)

users是从StringUser的地图。

val users: scala.collection.mutable.Map[String, User] = new HashMap

put方法需要类型为String的密钥和类型为User的值,但您尝试将其与Int类型的密钥一起使用。

您需要将地图更改为

类型
scala.collection.mutable.Map[Int, User]

或者您可以使用类型String的值作为键。