Grails控制器上的元方法注入

Grails控制器上的元方法注入,grails,groovy,metaprogramming,grails-2.0,Grails,Groovy,Metaprogramming,Grails 2.0,我编写了一个插件,将一个方法注入所有控制器,我在doWithDynamicMethod{ctx->}上编写了这个插件 它起作用了 有人能解释一下为什么会这样吗?我可以直接从视图调用动态方法吗 先谢谢你 试试这个 application.controllerClasses.each {controller -> controller.metaClass.doTestSearch = { //Your action code here } } 顺便说一句-您还可以使用Dynami

我编写了一个插件,将一个方法注入所有控制器,我在doWithDynamicMethod{ctx->}上编写了这个插件

它起作用了

有人能解释一下为什么会这样吗?我可以直接从视图调用动态方法吗

先谢谢你

试试这个

application.controllerClasses.each {controller ->
controller.metaClass.doTestSearch = {
     //Your action code here
 }
}

顺便说一句-您还可以使用DynamicController插件向控制器添加操作

grails似乎无法映射运行时添加的方法的URL,但我尚未对其进行测试。

对不起,application.ControllerClass.each之间有何区别{controller->和grailsApplication.controllerClasses中的类?没有区别,可能区别在于“静态”您正在添加一个静态闭包属性并试图将其用作操作。是的,控制器上的每个方法都声明为非静态方法吗?
<g:form method="POST">

<g:actionSubmit class="save" action="doTestSearch"
            value="${message(code: 'default.button.search.label', default: 'Search')}" />
doTestSearch(params)
application.controllerClasses.each {controller ->
controller.metaClass.doTestSearch = {
     //Your action code here
 }
}