在Grails应用程序中,我想为所有控制器类添加一个foo()方法。我知道我可以使用以下代码在插件的doWithDynamicMethods闭包中执行此操作:
application.controllerClasses.toList()*.metaClass*.foo = { println 'foo called' }
但是,我不想为此目的创建一个插件。还有其他地方我可以做到这一点。我怀疑它可能在init
的{{1}}闭包内,但我不知道如何访问此闭包中的BootStrap.groovy
实例。
谢谢, 唐
答案 0 :(得分:2)
def grailsApplication = org.codehaus.groovy.grails.commons.ApplicationHolder.application
答案 1 :(得分:0)
很久以前就提出了这个问题,所以当时我的回答可能不可能 - 但现在是2014年4月。这段代码显示了向所有控制器添加方法的最简单方法(从{{1 }}):
BootStrap.init
grailsApplication.controllerClasses.each { controllerClass ->
if (controllerClass.clazz.name.contains("org.idurkan.foo")) {
controllerClass.metaClass.respondError = { String message, int status = 404 ->
response.status = status
render([errorMessage: message] as JSON)
}
}
}
def grailsApplication
闭包(像方法一样调用它)。请注意,这不会添加操作!这只是一个实用程序闭包/方法 控制器。
答案 2 :(得分:-2)
class BootStrap {
def grailsApplication
def init = { servletContext ->
...
}
}