我正在使用 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)
在处理表单提交的操作中,我从请求中绑定表单,如下所示:
...
implicit request =>
barItemEditForm.bindFromRequest.fold(
formWithErrors => BadRequest(html.edit(id, formWithErrors, DistUnit.selectOptions, Category.selectOptions)),
item => {
...updateStuff...
}
)
...
所以现在的问题是,由于我在视图中没有“initialAmount”的输入字段,所以在从请求绑定时出现错误,说它没有价值。
是否有可能只应用请求中的部分值并在之前对 fill() 的调用中保留这个值?
或者任何人都可以提出一种处理这种“部分编辑”的正确方法吗?
我真的很期待任何建议!