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)

有用。

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

先感谢您

4

2 回答 2

0

尝试这个

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

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

于 2012-03-28T06:08:08.740 回答
0

看起来 grails 无法映射在运行时添加的方法的 URL,但我还没有测试过。

于 2015-05-26T13:01:24.170 回答