grails - 为什么在基类中未调用beforeValidate

标签 grails groovy

这只花了我将近半天的时间(主要是因为Grails / Gorm并不十分清楚发生的错误)

我必须将一个从另一个继承的类划分为域

class Base {
    String a

    static constraints = {
        a blank: false, nullable: false, unique: true
    }
}

class Extended extends Base {
    String b

    static constraints = {
        b blank: false, nullable: false, unique: true
    }
}

现在,我还有一个beforeValidate方法,它对a中定义的Base属性起作用。
def beforeValidate() {
    if (a == null) { a = "somevalue" }
}

如果我创建Extended的实例并将其保存
def instance = new Extended()
instance.save()

如果在beforeValidate中定义了class Extended,那么一切都会正常进行。

但是,如果我将beforeValidate放入class Base,它将失败(无提示)。

为什么?

PS:使用grails 2.4.0

最佳答案

如果基类不在grails-app/domain中,则不会调用事件处理程序。例如,如果项目的结构是这样的,则事件处理程序将被忽略:

src
    groovy
        mypackage
            Base.groovy
grails-app
    domain
        mypackage
            Extended.groovy

关于grails - 为什么在基类中未调用beforeValidate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23891238/

相关文章:

java - 如何在没有选项的情况下在 groovy 中使用 CliBuilder?

Groovy 无法解析类,但可以在 groovyconsole 中工作

string - 在 groovy 中获取标记化字符串中的最后一个单词

file - 如何在 Groovy 中抓取一行的一部分

parsing - 上传 CSV 文件并将数据解析到 Grails 中的数组?

java - Grails Mail 插件异常处理

javascript - Grails 资源插件和 AJAX 加载的 javascript

grails - 在grails中外部化 quartz 配置

rest - CRUD操作Grails

unit-testing - 如何为单元测试创​​建虚拟数据?