Forms 当表单包含内部大小写类时,验证scala表单
帮助进行Scala表单验证 以下是表单数据的案例类:Forms 当表单包含内部大小写类时,验证scala表单,forms,scala,validation,playframework-2.0,Forms,Scala,Validation,Playframework 2.0,帮助进行Scala表单验证 以下是表单数据的案例类: case class Data( firstName: String, lastName: String, email: String, confirm_email: String, password: String, confirm_password: String) } 以及Scala表单: val form = Form( mapping( "firstNam
case class Data(
firstName: String,
lastName: String,
email: String,
confirm_email: String,
password: String,
confirm_password: String)
}
以及Scala表单:
val form = Form(
mapping(
"firstName" -> nonEmptyText,
"lastName" -> nonEmptyText,
"email" -> email,
"confirm_email" -> email,
"password" -> nonEmptyText(minLength = 8),
"confirm_password" -> nonEmptyText(minLength = 8))(Data.apply)(Data.unapply))
现在的问题是我们需要验证“电子邮件”和“确认”电子邮件,但问题是我们需要创建元组
或映射
。那么,处理此类表单验证情况的最佳方法是什么呢。只需使用元组,而不将元组映射到任何case类,就可以很容易地实现这一点
但是如果我们被要求在
表单中使用映射
和case类
首先要做的事情是,我要去掉确认电子邮件
和确认密码
字段,因为它们在数据
模型中是多余的。完成此操作后,它将如下所示:
case class Data(
firstName: String,
lastName: String,
email: String,
password: String)
接下来,需要更新表单映射:
val form = Form[Data](
mapping(
"firstName" -> nonEmptyText,
"lastName" -> nonEmptyText,
"email" -> tuple(
"email1" -> email,
"email2" -> email
).verifying(Messages("form.error.emailNotEquals"), email => email._1 == email._2),
"password" -> tuple(
"pass1" -> nonEmptyText(minLength = 8),
"pass2" -> nonEmptyText(minLength = 8)
).verifying(Messages("form.error.passwordNotEquals"), password => password._1 == password._2)
)((firstName, lastName, email, password) => Data(firstName, lastName, email._1, password._1))
((form: Data) => Some((form.firstName, form.lastName, (form.email, form.email), ("", ""))))
)
需要进行两项修改:
- 电子邮件和密码字段的嵌套映射和验证
- 自定义
和apply
方法实现,以便将包含六个字段的表单映射到包含四个字段的models case类中unapply
unapply
方法不会为密码字段设置值,因为它在几乎所有情况下都是理想的行为
最后,必须修改视图以正确引用新的表单元组映射。例如,电子邮件字段应如下所示:
@helper.inputText(dataForm("email.email1"))
@helper.inputText(dataForm("email.email2"))
不使用新元组映射的字段保持不变。感谢ans Daniel,但我收到了以下错误:
[error]签名:Some.apply[A](x:A):Some[A][error]给定参数:form.firstName,form.lastName,scala.Tuple2(form.email,form.email),scala.Tuple2(“,”)[error]在调整后:Some((form.firstName,form.lastName,scala.Tuple2(form.email,form.email),scala.Tuple2(“,”):(String,String,(String,String,(String,String,String)))[error]((form:Data2)=>Some(form.firstName,form.lastName,(form.email,form.email),(“,”)
在表单的最后一行,((form:Data)=>Some(…)
应替换为((表格:数据)=>部分(…)
即额外的()
。如果您可以对答案进行必要的更改,我可以将您的答案标记为正确