gpt4 book ai didi

grails - Grails域的常见beforeUpdate方法

转载 作者:行者123 更新时间:2023-12-02 15:15:52 24 4
gpt4 key购买 nike

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

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: No signature of method:



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

我正在使用Grails 4。

最佳答案

我不确定您是在问如何完成所需的工作,还是为什么会遇到错误。

如果您想知道如何完成所需的工作,则可以使用事件侦听器,而不是对该方法进行元编程。那里有很多示例,https://github.com/jeffbrown/gorm-events-demo/blob/261f25652e5fead8563ed83f7903e52dfb37fb40/src/main/groovy/gorm/events/demo/listener/AuditListener.groovy#L22-L26是其中之一。

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

希望对您有所帮助。

关于grails - Grails域的常见beforeUpdate方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60537450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com