2

ドキュメントを閲覧していますが、コントローラーで inputRadioGroup を使用する方法の例が見つかりません。

このヘルパーを使用する必要があると思います。しかし、それをコントローラーのフォームにバインドするにはどうすればよいでしょうか? 1年生から5年生までを代表するラジオグループを紹介したいと思います

コントローラ:

object Sms extends Controller {  

val testForm: Form[Test] = Form (
    mapping(
      "firstname" -> nonEmptyText,
      "lastname" -> nonEmptyText,
      "password" -> tuple(
        "main" -> text(minLength = 6),
        "confirm" -> text
      ).verifying(
        "Passwords don't match", passwords => passwords._1 == passwords._2
      ),
      "email" -> tuple(
        "main" -> (text verifying pattern("^([0-9a-zA-Z]([-\\.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$".r, error="A valid email is req")),
        "confirm" -> text
        ).verifying(
        "Emails don't match", emails => emails._1 == emails._2
      ),
      "grade" -> Do the magic happen here?
    )(Test.apply)(Test.unapply)
  )



case class Test(
                    firstname: String,
                    lastname: String,
                    password: String,
                    email: String,
                    grade: Int
                    )

}

見る:

@inputRadioGroup(
testForm("grade"),
options = Seq("1"->1,"2"->2....and so on)
'_label -> "Grade",
'_error -> testForm("grade").error.map(_.withMessage("some error")))

これを行う方法がわかりません。

4

1 に答える 1

3

コントローラーで、可能なグレードの Seq を作成し、Seq をビューに渡します。GradeTuple2[String, String] をビューに渡すよりもケース クラスを使用するほうが好きです。でもそれは考え方次第だと思います。

case class Grade(value: Int, name: String)
private val grades = Seq(Grade(1, "Brilliant"), Grade(2, "Good"), Grade(3, "Ok")) 

val testForm: Form[Test] = Form (...
"grade"-> number
)(Test.apply)(Test.unapply)

def edit(id: Long) = Action {
  val model = ...obtain model
  Ok(views.html.edit(testForm.fill(model), grades))
}

def submit() = Action { 
  testForm.bindFromRequest.fold(
   formWithErrors => Ok(views.html.edit(formWithErrors, grades))
  }, test => {
    Logger.info("grade: " +  grades.find(_.value == test.grade).map(_.name))
    //save model...
    Redirect(...
  })
}

ビューで、グレード Seq を Tuple2[String, String] にマップしてフィードしますinputRadioGroup

@(testForm: Form[Test], grades: Seq[Grade])

@inputRadioGroup(contactForm("grade"), 
options = grades.map(g => g.value.toString -> g.name), 
'_label -> "Grade")
于 2013-03-01T17:07:25.143 に答える