gpt4 book ai didi

validation - 如何在 Play 框架 2 中的字段构造函数之外打印验证错误

转载 作者:行者123 更新时间:2023-12-04 11:09:38 26 4
gpt4 key购买 nike

如何在 Play 框架 2 中的字段构造函数之外显示表单字段的验证错误?这是我尝试过的:

@eventForm.("name").error.message

我得到这个错误:
value message is not a member of Option[play.api.data.FormError]

我很困惑,因为在 api docs它说 message 是 FormError 的成员。这也适用于全局错误:
@eventForm.globalError.message

最佳答案

您可以通过查看 Form's sourcecode here 更好地掌握它
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))

正如文档中所说,即使它不存在,它也会返回任何字段。还有一个 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 评论的那样:要使用不同的语言显示人类可读的漂亮消息,您必须检查游戏的运行方式 I18N 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!

在您的 Controller 中,您可以像这样检查表单(只需一行代码即可向您展示它的感觉)
"year" -> number.verifying("error.furtureBirthday", number <= 2012) // 2012 being the current year

如果您想使用语言,只需按照文档进行操作。

干杯,再次!

关于validation - 如何在 Play 框架 2 中的字段构造函数之外打印验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com