3

複数のテキストエリアを持つフォームを作成しようとしていますが、それぞれに対応するチェックボックスが付いています。基本的に、アプリケーションは「はい (チェックボックスがオン) の場合、テキストエリアを空白のままにします。そうでない場合は、なぜ間違っていると思いますかという説明を記入してください」として機能します。

モデルでは、私は持っています

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. フォームにエラーがある理由がよくわかりません。入力が必要な 2 つのフィールドはオプションとしてマークされています。これは、チェックボックスがチェックされていない場合や、回答ボックスが空白のままになっている場合があるためです。これはおそらく id フィールドのためですか?適用/適用解除メソッドで既に設定しているため、何が欠けているのかわかりません。

すべての入力に感謝します。

4

1 に答える 1

0

ドキュメントを参照してください:繰り返される値

@helper.repeat(myForm("emails"), min = 1) { emailField =>
    @helper.inputText(emailField)
}
于 2014-08-31T16:02:49.850 に答える