Tom*_*ant 7 validation scala view playframework playframework-2.0
如何在Play框架2中的字段构造函数之外显示表单字段的验证错误?这是我尝试过的:
@eventForm.("name").error.message
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
value message is not a member of Option[play.api.data.FormError]
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为在api文档中它说消息是FormError的成员.这也适用于全局错误:
@eventForm.globalError.message
Run Code Online (Sandbox Code Playgroud)
Form
定义一个apply方法:
def apply(key: String): Field = Field(
this,
key,
constraints.get(key).getOrElse(Nil),
formats.get(key),
errors.collect { case e if e.key == key => e },
data.get(key))
Run Code Online (Sandbox Code Playgroud)
正如文档中所述,即使它不存在,也会返回任何字段.并且Field
有一个errors
成员返回Seq[FormError]
:
所以,你可以做那样的事情(为了Seq[FormError]
):
eventForm("name").errors.foreach { error =>
<div>@error.message</div>
}
Run Code Online (Sandbox Code Playgroud)
或者(对Option[FormError]
)
eventForm("name").error.map { error =>
<div>@error.message</div>
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用Form
errors
:
def errors(key: String): Seq[FormError] = errors.filter(_.key == key)
Run Code Online (Sandbox Code Playgroud)
并获得给定密钥的所有错误.像这样(为Seq[FormError]
):
eventForm.errors("name").foreach { error =>
<div>@error.message</div>
}
Run Code Online (Sandbox Code Playgroud)
或者(对Option[FormError]
)
eventForm.error("name").map { error =>
<div>@error.message</div>
}
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多详细信息,请查看源代码.它写得很好,评论很好.
干杯!
编辑:
正如biesior评论的那样:要用不同的语言显示人类可读的漂亮信息,你必须检查I18N在这里是如何工作的
要彻底,你可能不得不处理I18N.让一切都运转起来并不难.阅读完文档后,您可能会发现自己有点消耗品.我会给你一点推动.将messages
文件添加到您的conf
文件夹,您可以从此处复制其内容.这样您就可以更好地控制默认消息.现在,在您看来,您应该能够做到这样的事情:
eventForm.errors("name").foreach { error =>
<div>@Messages(error.message, error.args: _*)</div>
}
Run Code Online (Sandbox Code Playgroud)
举例来说,如果error.message
是error.invalid
它会显示以前定义的消息conf/messages
文件Invalid value
.args
定义您的错误消息可能处理的一些参数.例如,如果您正在处理a error.min
,则arg
可能是所需的最小值.在您的消息中,您只需遵循{n}
模式,其中n是您的参数的顺序.
当然,您可以像这样定义自己的消息:
error.futureBirthday=Are you sure you're born in the future? Oowww hay, we got ourselves a time traveler!
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,您可以检查您的表单(只需一行代码就可以向您展示它的感觉)
"year" -> number.verifying("error.furtureBirthday", number <= 2012) // 2012 being the current year
Run Code Online (Sandbox Code Playgroud)
如果您想使用语言,请按照文档进行操作.
干杯,再次!