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)