Forms 如何在运行中一次验证多个表单字段?

Forms 如何在运行中一次验证多个表单字段?,forms,validation,playframework,playframework-2.3,Forms,Validation,Playframework,Playframework 2.3,所以我有一个表单对象: object RegisterForm { case class registerFormData( name: String, email: String, repeatemail: String, password: String, repeatpassword: String, timezone: Option[Int], dob: Int, accept: B

所以我有一个表单对象:

  object RegisterForm {
   case class registerFormData(
      name: String,
      email: String,
      repeatemail: String,
      password: String,
      repeatpassword: String,
      timezone: Option[Int],
      dob: Int,
      accept: Boolean
  )
  val registerForm: Form[registerFormData] = Form(
    mapping(
      "name" -> nonEmptyText,
      "email" -> nonEmptyText,
      "repeatemail" -> nonEmptyText,
      "password" -> nonEmptyText,
      "repeatpassword" -> nonEmptyText,
      "timezone" -> optional(number),
      "dob" -> number,
      "accept" -> checked("Please accept the terms and conditions.")
    )(registerFormData.apply)(registerFormData.unapply)
  )
}
我可以像在Java中一样一次验证多个字段吗


例如,我是否可以验证以检查密码和重复密码是否相等,检查以确保未使用用户名,然后将显示这两个错误的表单发回?

类似的方式会更好:

case class User(
   name: String,
   email: String,
   password: String,
   timezone: Option[Int],
   dob: Int,
   accept: Boolean
)

val registerForm: Form[User] = Form(
    mapping(
      "name" -> nonEmptyText,
      "email" -> tuple(
          "main" -> nonEmptyText,
          "confirm" -> nonEmptyText
      ).verifying(
           "Emails don't match", email => email._1 == email._2
      ).transform[String](
          email => email._1,      // Transform to a single field
          email => (email, email) // Reverse transform from a single field to multiple
      ),
      "password" -> tuple(
          "main" -> nonEmptyText,
          "confirm" -> nonEmptyText
      ).verifying(
           "Passwords don't match", password => password._1 == password._2
      ).transform[String](
          password => password._1,
          password => ("", "")
      ),
      "timezone" -> optional(number),
      "dob" -> number,
      "accept" -> checked("Please accept the terms and conditions.")
    )(User.apply)(User.unapply)
)
我个人也会从
表单
本身中删除
accept
,并在选中“accept”复选框之前阻止用户使用提交按钮。使用此方法,您可以减少引入case类的垃圾量,并且完全不需要单独的垃圾。HTML中的表单字段如下所示:

Email: <input type="text" name="email.main">
Confirm Email: <input type="text" name="email.confirm">

如何突出显示模板中的
password.main
password.confirm
字段?Thx。@这取决于您要如何突出显示它们。我建议用您当前使用的代码问一个新问题,并可能引用此问题。新线程已创建。
.verifying("Email address is already in use", email => User.findByEmail(email).isEmpty)