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