域类的 Grails 自定义验证器

标签 grails grails-domain-class grails-validation

我有一个限制,所以不能超过 ConfigurationHolder.config.support.reminder.web.person.max 对象存储。 我没有找到如何添加与特定属性无关的验证器。所以现在我以这种方式实现它。你们有什么想法可以让它变得更好吗?

package support.reminder.web

import org.codehaus.groovy.grails.commons.ConfigurationHolder;

class Person {

    String firstName
    String lastName
    String email
    Date lastDutyDate

    static constraints = {
        firstName(blank: false)
        lastName(blank: false)
        email(blank: false, email: true)
        lastDutyDate(nullable: true)
        id validator: {val ->
        if (val)
            Person.count() <= ConfigurationHolder.config.support.reminder.web.person.max
        else
            Person.count() < ConfigurationHolder.config.support.reminder.web.person.max
    }
    }

    String toString() {
        "[$firstName $lastName, $email, $lastDutyDate]"
    }
}

最佳答案

您可以使用 Grails Custom Constraints Plugin管理您的验证实现。然后你可以像预定义的 Grails 约束一样调用你自己的约束:

package support.reminder.web

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH

class Person {

    String firstName
    String lastName
    String email
    Date lastDutyDate

    static constraints = {
        firstName(blank: false)
        lastName(blank: false)
        email(blank: false, email: true)
        lastDutyDate(nullable: true)
        id(maxRows: CH.config.support.reminder.web.person.max)
    }

}

或者,如果您不想依赖第三方插件,您可以在服务方法中实现自定义验证器的逻辑,但从域中的自定义验证器调用它:

package support.reminder.web

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH

class Person {

    def validationService
    String firstName
    String lastName
    String email
    Date lastDutyDate

    static constraints = {
        firstName(blank: false)
        lastName(blank: false)
        email(blank: false, email: true)
        lastDutyDate(nullable: true)
        id (validator: {val ->
           validationService.validateMaxRows(val, CH.config.support.reminder.web.person.max)
        }
    }

}

关于域类的 Grails 自定义验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725059/

相关文章:

grails - 如何从gsp传递 Controller 中方法调用的参数?

grails - 如何根据拒绝访问的原因使Grails的Spring Security Core呈现不同的页面

grails - 如何定义 Grails 域对象关系

java - 如何在列出 Grails 域时排除某些字段?

hibernate - Grails和JPA批注+ hibernate 映射文件。如何摆脱这个错误?

Grails:嵌套命令对象

Grails:如何在 Grails 过滤器中设置响应包装器?

Grails 表单错误处理 : Binding 1:1 object mappings

交换属性值后,Grails 唯一测试失败

Grails 从父域模型更新一对多