Validation 如何在Play framework 2中打印字段构造函数外部的验证错误

Validation 如何在Play framework 2中打印字段构造函数外部的验证错误,validation,scala,view,playframework,playframework-2.0,Validation,Scala,View,Playframework,Playframework 2.0,如何显示Play framework 2中字段构造函数之外的表单字段的验证错误?以下是我尝试过的: @eventForm.("name").error.message 我得到了这个错误: value message is not a member of Option[play.api.data.FormError] 我很困惑,因为它在邮件中说消息是FormError的成员。对于全局错误,这同样适用: @eventForm.globalError.message 正如您自己所说,messag

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

@eventForm.("name").error.message
我得到了这个错误:

value message is not a member of Option[play.api.data.FormError]
我很困惑,因为它在邮件中说消息是FormError的成员。对于全局错误,这同样适用:

@eventForm.globalError.message

正如您自己所说,
message
FormError
的成员,但您有一个
选项[FormError]
。你可以用

eventForm("name").error.map(_.message).getOrElse("")

如果有错误,它会告诉您消息,如果没有错误,它会告诉您消息。

您可以通过检查更好地掌握它

表单
定义了应用方法:

 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))
正如文档中所说,它返回任何字段,即使它不存在。一个
字段
有一个
errors
成员,它返回一个
Seq[FormError]

eventForm("name").errors.foreach { error =>
  <div>@error.message</div>
}
eventForm.errors("name").foreach { error =>
      <div>@error.message</div>
}
因此,您可以这样做(对于
Seq[FormError]
):

或者,您可以使用
表单
错误

  def errors(key: String): Seq[FormError] = errors.filter(_.key == key)
并获取给定密钥的所有错误。像这样(对于
Seq[FormError]
):

如果您想了解更多详细信息,请查看源代码。它写得很好,评论也很好

干杯

编辑:

正如biesior评论的那样:要用不同的语言显示人类可读的漂亮消息,您必须检查play是如何工作的

要做到彻底,您可能必须处理I18N。要让一切顺利进行一点也不难。 读完这本书后,你可能还是会觉得有点累。我来推你一下。将
messages
文件添加到
conf
文件夹中,您可以从中复制其内容。这样,您就可以更好地控制默认消息。现在,在你看来,你应该能够做这样的事情:

eventForm.errors("name").foreach { error =>
          <div>@Messages(error.message, error.args: _*)</div>
}
error.futureBirthday=Are you sure you're born in the future? Oowww hay, we got ourselves a time traveler!
在你的控制器中,你可以像那样检查你的表单(只需一行代码就可以让你感受到它)


“year”->number.verifying(“error.furturebirth”),number只是提示,当然用于显示人类可读的消息,它应该用作
@消息(error.message)
而不是
@error.message
是的,I18N是另一个故事,所以我想我实际上需要学习scala来使用play.wleao,你的例子奏效了。我确实需要使用@Messages(error.message)来获得人类可读的消息,正如biesior所说。我到处都在寻找,如何将附加参数传递给@message(…),这篇文章不错
eventForm.errors("name").foreach { error =>
          <div>@Messages(error.message, error.args: _*)</div>
}
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