【发布时间】: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
)
updateForm 在UpdateController 中定义(未显示)。
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