验证中的Grails自定义字段名称

时间:2015-09-29 07:23:01

标签: java validation grails groovy

我正在使用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' })

然后我可以轻松使用默认验证

我尝试了其他帖子中的代码,但语法似乎是错误的。

任何解决方案将不胜感激。感谢。

2 个答案:

答案 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)
        }
    }