我正在使用grails 2.5.1
。
在数据库中,我得到了近百个字段(例如:card_no, card_user, user_name
,等等)。
默认情况下,验证会显示错误消息:property card_no cannot be null
但是,我要将其更改为:property Card No cannot be null
,我需要在message.property
中定义该错误。我有很多字段,每个字段定义error message
需要时间。
有没有办法为该字段定义constraints
?
赞:card_no(nullable: false, range: 0..19, validator: { val, obj -> return 'abc' })
然后我可以轻松使用默认验证
我尝试了其他帖子中的代码,但语法似乎是错误的。
任何解决方案将不胜感激。感谢。
答案 0 :(得分:0)
我认为问题在于您没有根据Java驼峰后备标准对Grails约定进行命名以命名所有属性。该属性应在Grails中命名为cardNo。 Grails会自动将属性名称cardNo
映射到表格列card_no
,但如果这不符合您的列名称,则应使用mapping
部分修复该名称。
编辑:如果您在属性命名中遵循约定,则可以使用i18n来自定义属性的名称。这也将反映在错误消息中。
答案 1 :(得分:0)
如果您使用scaffolding
或使用g:message
来呈现错误/验证消息,则overriding
message
命名空间中的g
标记可以达到您想要的效果。
您无需在邮件文件中添加任何自定义验证程序或任何邮件。您需要做的就是创建TagLib
,扩展ValidationTagLib
并覆盖message
关闭。
例如,在您的特定情况下,如果您只想在验证异常的情况下使字段名称更具可读性,则可以执行以下操作
class ApplicationTagLib extends ValidationTagLib {
Closure message = { attrs ->
def error = attrs.error
if(error && error instanceof FieldError) {
//arguments[0] should be the field name
error.arguments[0] = error.arguments[0].capitalize().replaceAll(/([a-z])([A-Z])/, '$1 $2')
}
super.message.call(attrs)
}
}