我正在使用Play 2.1.2,我有一个带有以下映射的表单:
Form(
mapping(
"id" -> ignored(NotAssigned: Pk[Long]),
"name" -> nonEmptyText,
"stock" -> number(min = 0),
"initialAmount" -> number(min = 0),
"distUnitId" -> longNumber,
"categoryId" -> longNumber
)
(BarItem.apply)
(BarItem.unapply)
)
在视图中,我想使用表单助手来编辑仅值的一部分。特别是,“initialAmount”值只能设置一次 - 创建项目时 - 不允许在编辑时更改。所以我只是不想在表单中显示它并在表单提交后“保留”它以前的值。
目前,编辑视图的有趣部分如下所示:
@form(routes.Application.update(id), 'class -> "form-inline") {
<fieldset>
@inputText(barItemEditForm("name"), '_label -> "Produktbezeichnung")
@inputText(barItemEditForm("stock"), '_label -> "Lagermenge")
@select(
barItemEditForm("distUnitId"),
distUnits,
'_label -> "Einheit"
)
@select(
barItemEditForm("categoryId"),
categories,
'_label -> "Kategorie"
)
导航到编辑视图时,我使用Form类的fill()方法填充表单:
BarItem.findById(id).map {
item =>
Ok(html.edit(id, barItemEditForm.fill(item), DistUnit.selectOptions, Category.selectOptions))
}.getOrElse(NotFound)
在处理表单提交的操作中,我将Form与请求绑定在一起,如下所示:
...
implicit request =>
barItemEditForm.bindFromRequest.fold(
formWithErrors => BadRequest(html.edit(id, formWithErrors, DistUnit.selectOptions, Category.selectOptions)),
item => {
...updateStuff...
}
)
...
现在的问题是,由于我在视图中没有“initialAmount”的输入字段,因此从请求绑定时会出现错误,说它没有值。
以某种方式可能只应用来自请求的部分值并保持这个值之前的fill()调用吗?
或者任何人都可以建议一种正确的方法来处理这种“部分编辑”?
我真的很期待任何建议!
答案 0 :(得分:0)
由于您希望保留该值,因此当您重新呈现表单时,这可能意味着隐藏的输入。如果先前的值来自其他地方,例如在数据库中,您可以为该字段定义另一个带有ignored
映射的表单。