myy*_*yyk 8 validation scala playframework playframework-2.0
假设我想要一个带有字段,电子邮件的表格,只有在他们没有输入电话号码时才需要.此外,只有在他们没有收到电子邮件时才需要电话号码,我该怎么办?做这个?
如果需要NoValid,我想做这样的事情.
import play.api.data._
import play.api.data.Forms._
import play.api.data.validation.Constraints._
case class User(email: Option[String] = None, age: Option[Int])
val userForm = Form(
mapping(
"email" -> email.verifying(requiredNoValid(phoneNumber)),
"phoneNumber" -> number.verifying(requiredNoValid(email))
)(User.apply)(User.unapply)
)
Run Code Online (Sandbox Code Playgroud)
我已经在Play 1.X中为此构建了自己的解决方案,但我想放弃其中的大部分内容并使用Play 2表单为我执行此操作,如果功能在那里或者是否有办法通过实现验证器或约束.
您还可以添加verifying
几个字段.举个简单的例子:
val userForm = Form(
mapping(
"email" -> optional(email),
"phoneNumber" -> optional(number)
) verifying("You must provide your email or phone number.", {
case (e, p) =>
isValidEmail(e) || isValidPhoneNumber(p)
})(User.apply)(User.unapply)
)
Run Code Online (Sandbox Code Playgroud)
在外部验证中,您可以访问电子邮件和电话号码,并可以进行交叉验证.
这个解决方案适用于Java,但我相信如果你使用scala,你可以这么类似.一旦你提交并验证它,你就可以得到绑定的表单数据.如果它无效,您可以拒绝表单并显示一些错误消息.例如:
//Get filled form
Form<User> filledForm = userForm.bindFromRequest();
//Get the user object
User u = filledForm.get();
//If both are not empty
if(u.phoneNumber.isEmpty() && u.email.isEmpty()){
filledForm.reject("email", "You must provide a valid email or phone number");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2834 次 |
最近记录: |