我想beforeUpdate
为域类的事件编写自定义侦听器:我的项目中有很多域类。我想创建自定义侦听器,并且在beforeUpdate
每个域类的事件中我想执行一些逻辑。
问问题
428 次
3 回答
2
您可以设置全局beforeInsert
和beforeUpdate
类似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 回答