3

我正在尝试更改使用 Play 框架创建的表单中显示的验证消息的文本

在此处输入图像描述

根据绑定到表单字段的属性类型,自动显示“必需”、“数字”、“日期(yyyy ...)”等文本。

@implicitFieldConstructor = @{
    FieldConstructor(twitterBootstrapInput.f)
}

<fieldset>
  @inputText(productForm("id"), '_label -> "Product id")
  @inputText(productForm("info.name"), '_label -> "Name", 'placeholder -> "Product Name")
  @inputText(productForm("info.code"), '_label -> "Code")
  @inputText(productForm("info.weight"), '_label -> "Weight")
 @inputDate(productForm("info.dateAdded"), '_label -> "Date Added")
</fieldset>

这一切都很好,但我想知道我该如何改变它。@inputText是否可以通过在元素上使用某些属性,例如。smth like '_helpinline -> "Please enter the name"(我确实寻找过这样的东西,但找不到任何东西),也许人们还有其他使用方式?

这些消息显示在 Twitter 引导help-inline样式元素中。

4

1 回答 1

1

虽然可以通过将message参数传递给约束注释(如@Required(message = "abc"))轻松更改错误消息,但这些信息并非如此。实际上,这就是它们被定义的地方:在一个注释中,约束注释本身被注释(所以元)。如果我解释得太难,请查看来源。注意@play.data.Form.Display(name="constraint.required")线。

那么,我们能用这个做什么呢?

选项 1:如果您想为所有@Required 字段更改此项。如您所见,此注释定义的不是消息本身,而是它的本地化键。因此,您可以在本地化中覆盖它,只需在您的 中添加以下行conf/messages.en

constraint.required=This is so very required!

然后是所有其他语言文件。

选项 2:如果您希望每个输入都有不同的消息作为参数给出。然后你根本不需要进入这个验证机制,你可以修改你的字段构造函数这是内置 twitter 引导字段构造函数的来源。通过复制来制作自己的(如果你还没有的话),然后将你想要的所有内容放入<span class="help-inline">. 例如,要处理'_helpinline -> "Please enter the name",第 14 行可能如下:

<span class="help-inline">
    @elements.args.get('_helpinline).getOrElse( elements.errors(elements.lang).mkString(", ") )
</span>

你看,我把初始值放进去getOrElse,这样如果你不提供任何'_helpinline默认信息就会被使用。

选项 3:如果您希望每个输入都有不同的消息,请通过注释自定义,就像@Required(message = "abc"). 然后,您可能希望通过从源代码复制粘贴并进行一些修改来制作自己的自定义 @Require 注释。这是最棘手的选项,我认为选项 2 更好,但知道如何制作自己的验证器注释仍然很有用,因为它并不像看起来那么困难。

希望其中一些变体会有所帮助。我打赌2号,实际上:)

于 2013-08-22T13:53:11.523 回答