使用play框架和Scala将数据插入嵌套形式

时间:2018-09-10 17:28:57

标签: scala playframework

我想创建一个表单,用户可以在其中更新其先前插入的值。即我从数据库中获取数据,并由此创建表单数据。我无法将数据库中的值map Form上。

这是我的数据的精简版本。 Registration是来自数据库的数据,UpdateData是表单的案例类。

case class Car (
  hasCar: Boolean,
  trailerHitch: Boolean
)

case class Registration(
    id: Long,
    car: Car,
    comment: String
)

case class UpdateData(
  car: Car,
  comment: String
)

updateFormUpdateController内部定义(未显示)。

val updateForm = Form[UpdateData](
    mapping(
        "car" -> mapping(
            "hasCar" -> boolean,
            "trailerHitch" -> boolean
            )(Car.apply)(Car.unapply),
        "comment" -> text
    )(UpdateData.apply)(UpdateData.unapply)
)

我想用类型updateForm的{​​{1}}的数据填充类型Form[UpdateData]的{​​{1}}。 该数据以用于更新先前输入的值的形式使用。 因此,名称为registration

问题是我不知道如何填写Registration嵌套结构。

updateForm

错误是这样的:

Form[UpdateData]

我知道// NOT WORKING def makeUpdateFormDataFromRegistration(registration: Registration) = updateForm.bind(Map( "car" -> Map( "hasCar" -> registration.car.hasCar.toString, "trailerHitch" -> registration.car.trailerHitch.toString), "comment" -> registration.comment)) 需要一个overloaded method value bind with alternatives: [error] (data: play.api.libs.json.JsValue)play.api.data.Form[controllers.UpdateData] <and> [error] (data: Map[String,String])play.api.data.Form[controllers.UpdateData] [error] cannot be applied to (scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,String]]) ,但是我不知道如何为嵌套的updateForm.bind创建这样的结构。

如何将数据绑定到此嵌套的Map[String,String]

1 个答案:

答案 0 :(得分:0)

嵌套值需要点分隔符: https://www.playframework.com/documentation/2.6.x/ScalaForms#Nested-values

updateForm.bind(Map(
    "car.hasCar" -> registration.car.hasCar.toString,
    "car.trailerHitch" -> registration.car.trailerHitch.toString,
    "comment" -> registration.comment))