Play! 中的嵌套形式斯卡拉 2.2

Nested form in Play! Scala 2.2

我已经阅读了好几遍文档,但我在 Play 中的嵌套表单仍然存在问题! Scala 2.2(进一步详细说明)。

这是我的表格:

<form method="post" action="/admin/test2">
    first name : <input type="text" name="firstname"> <br>
    info 0 : <input type="text" name="label[0]"> <br>
    info 1 : <input type="text" name="label[1]"> <br>
    <input type="submit" value="test nested form" />
</form>

与类大小写对应:

case class Contact(firstname: String,
               informations: Seq[ContactInformation])

case class ContactInformation(label: String)


 val contactForm: Form[Contact] = Form(
    mapping(
      "firstname" -> nonEmptyText,
      "informations" -> seq(
        mapping(
          "label" -> nonEmptyText
        )(ContactInformation.apply)(ContactInformation.unapply)
      )
    )(Contact.apply)(Contact.unapply)
  )

  def saveContact = Action { implicit request =>
    contactForm.bindFromRequest.fold(
      formWithErrors => Ok("error"),
      contact => {
        println(contact)
        Ok("Done")
      }
    )
  }

我没有收到任何错误,但是我从表格(打印有 println(contact))中获得的联系人信息字段为空,即看起来像这样:Contact(h,List())

错误可能来自 html 部分,因为我已经严格遵守此页面的文档:play! scala forms documentation 但是我想不通。

input的字段名称应该使用Form中的完整路径。 label 出现在 informations Mapping 中,而 informations 是序列,而不是 label,所以你应该使用 informations[0].label 而不是 label[0]

您的视图应如下所示:

first name : <input type="text" name="firstname"> <br>
info 0 : <input type="text" name="informations[0].label"> <br>
info 1 : <input type="text" name="informations[1].label"> <br>