以Play2的形式列出映射

时间:2013-06-16 17:13:31

标签: scala playframework playframework-2.0

我正在尝试创建一个包含多个textarea的表单,每个表单都有一个相应的复选框。基本上,应用程序的工作方式是“如果是(复选框已选中),请将textarea留空。否则,请填写您为何认为错误的解释”。

在模特中,我有

case class AnswerMapping(id: Long, status: Option[String], result: Option[String]

val form = Form[Seq[Answers](
  mapping(
   "details" ->
      list(mapping(
        "id" -> longNumber,
        "status" -> optional(text),
        "result" -> optional(text)
      )(AnswerMapping.apply)(AnswerMapping.unapply)
  ))(apply)(unapply)
)

在观点中,我有

@helper.form(action = controllers.conflict.routes.Answer.updateAnswer(ans.id()) {
  <div class="row-fluid">
    <div class="span12">
      @ans.details.get.zipWithIndex.map { case(detail, index) =>
        @helper.textarea(
          form(("details[" + index + "].result")),
          'class -> "input-xlarge resizable",
          'id -> ("box" + index),
          '_label -> "")
      }
    </div>
    <div class="controls">
      <input value="Submit" type="submit" class="btn btn-primary">
    </div>
  </div>
}

呈现的HTML看起来像<textarea id="box0" name="details[0].result" class="input-xlarge resizable" id="box0"></textarea>

但是,当我提交表单时,我被重定向回同一页面。这可能是因为我在我的控制器中有这个,这意味着我的表单中有错误

Ans.form.bindFromRequest.fold(
  formWithErrors => Ok(views.html.answer.edit(answer, formWithErrors)),
  ans => { // save the answer }

我的问题:

  1. 以上details[0].result是访问表单列表中元素的正确语法
  2. 我不太明白为什么我的表单有错误。需要填写的两个字段标记为可选,只是因为有时不检查复选框,有时答案框留空。这可能是因为id字段?我已经在我的apply / unapply方法中设置了它,所以我不确定我缺少什么。
  3. 感谢您的所有输入。

1 个答案:

答案 0 :(得分:0)

请参阅文档:Repeated values

@helper.repeat(myForm("emails"), min = 1) { emailField =>
    @helper.inputText(emailField)
}