【问题标题】:Insert data into nested form with play framework and Scala使用 play 框架和 Scala 将数据插入嵌套形式
【发布时间】:2018-09-10 17:28:57
【问题描述】:

我想创建一个表单,用户可以在其中更新他们之前插入的值。 IE。我从数据库中获取数据并从中创建表单数据。我无法将数据库中的值 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)
)

我想用来自registration 类型Registration 的数据填写Form[UpdateData] 类型的updateForm。 此数据以用于更新先前输入的值的形式使用。 因此,名称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],但我不知道如何为嵌套的updateForm 创建这样的结构。

如何将数据绑定到这个嵌套的updateForm

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    嵌套值需要点分隔符: 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多