这些消息是从消息中获取的。您可以创建自定义消息文件并将自定义文本放在那里。浏览源以检查放置在那里的有效字符串是什么。
例如nonEmptyText声明如下:
val nonEmptyText: Mapping[String] = text verifying Constraints.nonEmpty
从那里,Constraints.nonEmpty 看起来像这样:
def nonEmpty: Constraint[String] = Constraint[String]("constraint.required") { o =>
if (o == null) Invalid(ValidationError("error.required")) else if (o.trim.isEmpty) Invalid(ValidationError("error.required")) else Valid
}
所以错误字符串是"error.required"
现在你可以在 conf 目录下创建一个文件messages 并放一行
error.required=This field is required
ValidationError 有 apply 方法声明如下:
def apply(message: String, args: Any*)
这意味着你也可以在那里传递参数,在messages 中你可以使用{arg_num} 语法访问它们
例如,如果您创建了这样的错误
val format = ???
ValidationError("error.time", someFormat)
它将以有界形式返回,然后 play 将使用 MessagesApi 查找名为“error.time”的消息并相应地对其进行格式化,例如,您可以创建这样的消息:
error.time=Expected time format is {0}
我的想法是为每个字段自定义消息是这样的自定义方法:
def nonEmptyTextWithError(error: String): Mapping[String] = {
Forms.text verifying Constraint[String]("constraint.required") { o =>
if (o == null) Invalid(ValidationError(error)) else if (o.trim.isEmpty) Invalid(ValidationError(error)) else Valid
}
}
如果您想使用许多约束孩子,这可能不是一个理想的解决方案。