首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails域的通用beforeUpdate方法

Grails域的通用beforeUpdate方法
EN

Stack Overflow用户
提问于 2020-03-05 02:37:37
回答 1查看 100关注 0票数 0

我试图通过用beforeUpdate编写BootStrap.groovy来使用一种常见的BootStrap.groovy方法。

代码语言:javascript
复制
def init = { servletContext ->
         for (domainClass in grailsApplication.domainClasses) {
            if(domainClass.clazz.simpleName == domainName){
                domainClass.metaClass.beforeUpdate = {
                    println  "i am here "
                    def dirtyPropertyNames = this.getDirtyPropertyNames()
                    println(dirtyPropertyNames)
                    if(dirtyPropertyNames != null && dirtyPropertyNames.size() > 0) {

                        for (dirtyPropertyName in dirtyPropertyNames) {
                            def oldValue = (this.getPersistentValue((dirtyPropertyName)))
                            def newValue = (this."${dirtyPropertyName}")
                        }
                    }
                }
            }
        }
    }

但是我不能使用this.getdirtyPropertyNames(),因为它会产生错误。

groovy.lang.MissingMethodException:没有方法的签名:

如果它在域中本身,this.getDirtyPropertyNames()就可以正常工作。我也尝试过使用domainClass.getDirtyPropertyNames(),但仍然会出现错误。

我正在使用Grails 4。

EN

回答 1

Stack Overflow用户

发布于 2020-03-05 03:49:37

我不知道你是否在问如何完成你想要的,或者你为什么要得到你要得到的错误。

如果您想知道如何完成所需的任务,我将使用事件侦听器而不是元编程方法。有很多例子,https://github.com/jeffbrown/gorm-events-demo/blob/261f25652e5fead8563ed83f7903e52dfb37fb40/src/main/groovy/gorm/events/demo/listener/AuditListener.groovy#L22-L26就是其中之一。

如果您在问为什么要获得所获得的错误,原因是this引用了BootStrap实例,而不是域类的实例。如果您真的想使用动态元编程方法(您不应该),那么您可以通过引用delegate而不是this来解决问题的这个特定部分。

我希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60537450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档