Play framework 2.0:使用属性值创建验证错误消息

时间:2012-08-09 13:54:48

标签: scala playframework validation

使用scalaforms作为播放框架,假设我有以下形式:

case class User(name: String, emails: List[String])

val userForm = Form(
    mapping(
        "name" -> text,
        "emails" -> list(text).verifying("Emails are duplicated",x => SomeFunctionThatHandlesDuplicateEmails(x))
    )(User.apply, User.unapply)
  )

其中SomeFunctionThatHandlesDuplicateEmails是一个函数,如果表单中收到的任何电子邮件已经在数据库中,则返回false(因此,使该字段无效)。

现在,我的问题是:

有没有办法使用验证字段的值来创建错误消息?我想告诉用户特别是哪些电子邮件是重复的,而不是像上面所示告诉他们“电子邮件是重复的”。

1 个答案:

答案 0 :(得分:2)

verifying()需要一系列Constraint[T]

您可以看到实施约束的示例here

请注意,每个验证函数都会收到要验证的值,例如:下面重复“min”约束中的“o”:

 def min(minValue: Int): Constraint[Int] = Constraint[Int]("constraint.min", minValue) { o =>
   if (o >= minValue) Valid else Invalid(ValidationError("error.min", minValue))
 }

这可能很容易:

 def min(minValue: Int): Constraint[Int] = Constraint[Int]("constraint.min", minValue) { o =>
   if (o >= minValue) Valid else Invalid(ValidationError("error.min", minValue, o))
 }

这将使“o”可用于错误消息格式化程序{1}(minValue为{0})。