1

我想beforeUpdate为域类的事件编写自定义侦听器:我的项目中有很多域类。我想创建自定义侦听器,并且在beforeUpdate每个域类的事件中我想执行一些逻辑。

4

3 回答 3

2

您可以设置全局beforeInsertbeforeUpdate类似BootStrap.groovy

import org.codehaus.groovy.grails.commons.GrailsDomainClass

class BootStrap {

  def grailsApplication

  def init = { servletContext ->
    grailsApplication.domainClasses.each { GrailsDomainClass gc ->
        gc.metaClass.beforeInsert = {
            log.debug "beforeInsert"
            //code here
        }
        gc.metaClass.beforeUpdate = {
            log.debug "beforeUpdate"
            //code here
        }
    }
  }

  def destroy = {}
}


如果您想对某些域类执行不同的操作,而对其他域类执行不同的操作,那么

grailsApplication.domainClasses.each { GrailsDomainClass gc ->
    if(gc.metaClass.javaClass.equals(User) || gc.metaClass.javaClass.equals(Role)){
        gc.metaClass.beforeInsert = {
            log.debug "beforeInsert"
            //code here
        }
        gc.metaClass.beforeUpdate = {
            log.debug "beforeUpdate"
            //code here
        }
    } else ...
}
于 2013-11-10T08:58:53.890 回答
1

扩展@user1690588 的答案,您还可以使用以下方法挑选您想要在其中进行beforeInsert事件的域类:

grailsApplication.getDomainClass('com.myapp.MyDomain')
于 2013-11-10T18:57:54.960 回答
0

您可以将服务注入域类并在 beforeUpdate 事件上调用服务方法。并对多个领域类使用相同的服务方法。领域类:

class TestDomain {

    transient testService

    def beforeUpdate() {
        testService.testMethod()
    }
}

服务等级:

class TestService {

    def testMethod() {
        // Custom logic goes here
    }
}
于 2013-11-10T08:19:29.890 回答