Groovy自定义验证器

时间:2015-09-02 15:10:14

标签: validation grails groovy

Grails 2.2.3

我的自定义验证器

bankCode( nullable: false, blank: false, minSize: 8, maxSize: 8, validator: {pValue, pDomain ->
        List<CashAccountMapping> lCashAccountMappingList =
            CashAccountMapping.findAllByBankCodeAndSchoolYear(pValue, pDomain.schoolYear )
        lCashAccountMappingList = lCashAccountMappingList - pDomain
        if (lCashAccountMappingList) {
            return 'cashAccountMapping.invalid.validator.message'
        }
    })

我的自定义错误消息没有按照我的想法返回。它在下面我怎么出去? 我想把它变成一串显示给用户的所有错误

if ( newCashAccountMapping.validate() ) {
    newCashAccountMapping.save(flush:true)
}
else {
    newCashAccountMapping.errors.each { it
        println it //Add to a string of errors
    }
}

在我的messages.properties

cashAccountMapping.invalid.validator.message={0} XYZ

运行代码时我得到以下信息:

  

[字段'bankCode'中对象'com.srm.ledger.CashAccountMapping'中的字段错误:被拒绝的值[CK01 036];代码[com.srm.ledger.CashAccountMapping.bankCode.validator.error.com.srm.ledger.CashAccountMapping.bankCode,com.srm.ledger.CashAccountMapping.bankCode.validator.error.bankCode,com.srm.ledger.CashAccountMapping。 bankCode.validator.error.java.lang.String,com.srm.ledger.CashAccountMapping.bankCode.validator.error,cashAccountMapping.bankCode.validator.error.com.srm.ledger.CashAccountMapping.bankCode,cashAccountMapping.bankCode.validator。 error.bankCode,cashAccountMapping.bankCode.validator.error.java.lang.String,cashAccountMapping.bankCode.validator.error,com.srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.com.srm.ledger。 CashAccountMapping.bankCode,com.srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.bankCode,com.srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.java.lang.String,融为一体。 srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message,cashAccountMapping.ban kCode.cashAccountMapping.invalid.validator.message.com.srm.ledger.CashAccountMapping.bankCode,cashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.bankCode,cashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.java.lang。串,cashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message,cashAccountMapping.invalid.validator.message.com.srm.ledger.CashAccountMapping.bankCode,cashAccountMapping.invalid.validator.message.bankCode,cashAccountMapping.invalid.validator.message。 java.lang.String中,cashAccountMapping.invalid.validator.message];参数[bankCode,Cash Account Mapping,CK01 036];类[{2}]的类[{1}]的默认消息[属性[{0}]未通过自定义验证]]

1 个答案:

答案 0 :(得分:1)

尝试:

if (lCashAccountMappingList) {
    return ['cashAccountMapping.invalid.validator.message']
}

然后grails会寻找这个属性:

yourClassName.bankCode.cashAccountMapping.invalid.validator.message=Invalid {0} value

有关更多示例,请参阅validator documentation