使用Twitter Bootstrap字段播放框架表单验证消息

时间:2013-08-22 13:01:19

标签: scala twitter-bootstrap playframework

我正在尝试更改使用Play框架

创建的表单中显示的验证消息的文本

enter image description here

“必需”,“数字”,“日期(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元素上使用某些属性,例如。像'_helpinline -> "Please enter the name"一样的smth(我确实找过这样的smth但找不到任何东西),也许人们还有其他方式使用?

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

1 个答案:

答案 0 :(得分:1)

虽然可以通过将message param传递给约束注释(例如@Required(message = "abc"))来轻松更改错误消息,但对于这些信息不是这样。实际上,这就是定义它们的地方:在一个注释中,constratin注释本身就是注释(so meta)。如果我解释得太困难,请see source。请注意@play.data.Form.Display(name="constraint.required")行。

那么,我们能做些什么?

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

即可
constraint.required=This is so very required!

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

选项2:如果您希望每个输入都有不同的消息作为参数。那么你根本不需要进入这种验证机制,只需修改你的字段构造函数即可。 Here is the source内置的twitter bootstrap字段构造函数。通过复制它自己创建(如果你还没有),并将你想要的所有内容放入<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注释,方法是从the source并进行一些修改。这是最棘手的选择,我认为选项2更好,但是,知道如何制作自己的验证器注释是有用的,因为它不像看起来那么困难。

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