Grails控制器上的meta方法注入

时间:2012-03-28 04:00:51

标签: grails groovy metaprogramming grails-2.0

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

上写了这个
    for (classes in org.codehaus.groovy.grails.commons.ApplicationHolder.application.controllerClasses){
         def controllerClass = classes.clazz
         controllerClass.metaClass.static.doTestSearch << {args ->
             println "this is dynamic insertion -->"+args.toString()
         }
         classes.class.metaClass.doTestSearch << {args ->
             println "this is dynamic insertion -->"+args.toString()
         }
    }

当我试图通过以下方式在表单中调用此方法时:

<g:form method="POST">

<g:actionSubmit class="save" action="doTestSearch"
            value="${message(code: 'default.button.search.label', default: 'Search')}" />

该方法未调用并返回404错误。

但是当我试图通过以下方式从控制器调用它时:

doTestSearch(params)

有效。

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

提前谢谢

2 个答案:

答案 0 :(得分:0)

试试这个

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

BTW - 你也可以使用DynamicController插件向控制器添加动作

答案 1 :(得分:0)

看起来Grails无法映射运行时添加的方法的URL,但我还没有对其进行测试。