grails - Grails中的自定义域约束

标签 grails gorm grails-2.0 grails-domain-class

public class Service {

    String reviewChanges
    String comment

    static constraints = {
      reviewChanges (inList:['NO','YES'])
      comment validator: { val, obj ->
        if(reviewChanges=='YES') {
          (nullable:false, blank:false, minSize:1, maxSize:500)
        } else {
          (nullable:true, blank:true, minSize:1, maxSize:500)
        }
      }
    }
}

以上评论验证程序不适用于我。
我想要的是,如果reviewChanges字段选择为YES,那么Comment字段必须为必填字段,否则注释为非必需

最佳答案

使用自定义验证器的最佳方式将是这样。

static constraints = {
    reviewChanges(inList:['NO','YES'])
    comment validator: { val, obj,errors ->
        if (obj.reviewChanges == 'YES' && StringUtils.isEmpty(val))  { 
            errors.rejectValue('comment',"some.custom.validation.key")
        }
    }
}

errors.rejectValue 将允许您使用propertyName给出正确的字段错误,也可以将其用于参数化错误...
errors.rejectValue('propertyName','errorCode',errorArgs as Object[],'defaultMessage')

并定义errorCode是message.properties以访问errorArgs之类的
errorCode = This is {0} first parameter being passed as errorArgs.

谢谢

关于grails - Grails中的自定义域约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019141/

相关文章:

grails - GORM在调用beforeInsert方法之前检查约束

hibernate - Grails引发非唯一对象异常

unit-testing - 当参数具有grailsparametermap属性时,如何测试验证错误?

grails - 运行Grails应用程序时出错

Grails clean 命令抛出空指针异常

xml - .xsd 不是此编译的一部分 - 错误

jquery - 从服务器异步接收数据,而无需Ajax调用

grails - ils。将域对象的集合从HttpSession重新附加到Hibernate session

url - 如何从 Grails 应用程序的 URL 中删除应用程序名称?

apache - 带有 Tomcat/Apache ProxyPass 的 Grails URL