我想创建一个表单,用户可以在其中更新其先前插入的值。即我从数据库中获取数据,并由此创建表单数据。我无法将数据库中的值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)
)
我想用类型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]
?
答案 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))