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

在您的控制器中,您创建一个可能成绩的序列并将序列传递给您的视图。我更喜欢使用案例类Grade,然后将 Tuple2[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 回答