我正在尝试更改使用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
元素上使用某些属性,例如。像'_helpinline -> "Please enter the name"
一样的smth(我确实找过这样的smth但找不到任何东西),也许人们还有其他方式使用?
这些消息显示在Twitter bootstrap help-inline
样式元素中。
答案 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更好,但是,知道如何制作自己的验证器注释是有用的,因为它不像看起来那么困难。
希望其中一些变体会有所帮助。我打赌第二,实际上:))