如何在 Play 框架 2 中的字段构造函数之外显示表单字段的验证错误?这是我尝试过的:
@eventForm.("name").error.message
我得到这个错误:
value message is not a member of Option[play.api.data.FormError]
我很困惑,因为在api 文档中它说 message 是 FormError 的成员。这也适用于全局错误:
@eventForm.globalError.message
如何在 Play 框架 2 中的字段构造函数之外显示表单字段的验证错误?这是我尝试过的:
@eventForm.("name").error.message
我得到这个错误:
value message is not a member of Option[play.api.data.FormError]
我很困惑,因为在api 文档中它说 message 是 FormError 的成员。这也适用于全局错误:
@eventForm.globalError.message
您可以在此处查看 Form 的源代码来更好地掌握它
Form
定义一个应用方法:
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))
正如文档中所说,即使它不存在,它也会返回任何字段。并且 aField
有一个errors
返回 a 的成员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 评论的那样:要使用不同的语言显示人类可读的漂亮消息,您必须检查 play 是如何工作的 I18N 在这里
为了彻底,你可能不得不处理 I18N。让这一切正常工作一点也不难。阅读文档后,您可能仍会感到有些困惑。我会给你一点推动力。将文件添加messages
到您的文件夹,您可以从此处conf
复制其内容。这样您就可以更好地控制默认消息。现在,在您看来,您应该能够执行以下操作:
eventForm.errors("name").foreach { error =>
<div>@Messages(error.message, error.args: _*)</div>
}
例如,如果它会显示先前在文件error.message
中定义的消息。定义您的错误消息可能处理的一些参数。例如,如果您正在处理,则 an可能是所需的最小值。在您的消息中,您只需要遵循模式,其中 n 是您的论点的顺序。error.invalid
conf/messages
Invalid value
args
error.min
arg
{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
如果您想使用语言,只需按照文档进行操作。
干杯,再一次!
正如你自己所说,message
是 的成员FormError
,但你有一个Option[FormError]
. 你可以使用
eventForm("name").error.map(_.message).getOrElse("")
这会给你消息,如果有错误,""
如果没有。