0

我正在使用 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() 的调用中保留这个值?

或者任何人都可以提出一种处理这种“部分编辑”的正确方法吗?

我真的很期待任何建议!

4

1 回答 1

0

由于您想保留该值,这可能意味着在重新呈现表单时隐藏输入。如果先前的值来自其他地方,例如数据库,您可以定义另一个带有ignored该字段映射的表单。

于 2013-08-15T16:43:54.967 回答