我在游戏框架中创建了带约束的表单:
val voucherForm = Form(
mapping(
"voucherName" -> nonEmptyText,
"voucherCode" -> optional(text(minLength = 6).verifying(pattern("""[a-zA-Z0-9]+""".r, error = "...")))
)(VoucherForm.apply)(VoucherForm.unapply)
)
当我在网页上显示此表单时,我在输入框附近显示了约束消息(如Required
,Minimum length: 6, constraint.pattern
)。
我想为每个输入字段自定义此约束消息(即,相同形式的两个nonEmptyText
约束将具有不同的约束消息)。我怎么能这样做?
答案 0 :(得分:2)
这些消息来自消息。您可以创建自定义消息文件并将自定义文本放在那里。浏览源代码以检查放在那里的有效字符串是什么。
例如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
的{{1}}方法声明如下:
apply
这意味着您也可以在def apply(message: String, args: Any*)
中传递参数,您可以使用messages
语法
例如,如果你创建了这样的错误
{arg_num}
将以有界形式返回,然后播放将使用val format = ???
ValidationError("error.time", someFormat)
查找名为“error.time”的消息并相应地格式化,例如,您可以创建如下消息:
MessagesApi
我想为每个字段设置自定义消息是一种自定义方法,如下所示:
error.time=Expected time format is {0}
如果你想要使用许多有限制的孩子,可能不是一个理想的解决方案。
答案 1 :(得分:2)
您可以不使用text
,而是将自定义消息放在verifying
中,而不是使用nonEmptyText:
val voucherForm = Form(
mapping(
"voucherName" -> text.verifying(
"Please specify a voucher name", f => f.trim!=""),
...