【问题标题】:Groovy Custom ValidatorGroovy 自定义验证器
【发布时间】:2015-09-02 15:10:14
【问题描述】:

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,com. 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];默认消息 [类 [{1}] 的属性 [{0}],值为 [{2}] 未通过自定义验证]]

【问题讨论】:

    标签: validation grails groovy


    【解决方案1】:

    尝试:

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

    然后 grails 会寻找这个属性:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-02
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多