【问题标题】:Scala example of inputRadioGroup in Play2.1Play2.1 中 inputRadioGroup 的 Scala 示例
【发布时间】:2013-03-01 15:38:22
【问题描述】:

我正在浏览文档,但找不到如何在控制器中使用 inputRadioGroup 的示例。

我想我应该使用this 助手。但是如何将它绑定到我的控制器中的表单? 我想展示一个代表 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")))

我不知道该怎么做。

【问题讨论】:

    标签: forms scala radio-group playframework-2.1


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2023-01-23
      相关资源
      最近更新 更多