мета-метод ввода на Grails Controller - PullRequest
0 голосов
/ 28 марта 2012

Я написал плагин для внедрения метода во все контроллеры, я написал это на 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 голосов
/ 26 мая 2015

Похоже, Grails не может сопоставить URL для методов, добавленных во время выполнения, но я не проверял его.

0 голосов
/ 28 марта 2012

Попробуйте это

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

Кстати - вы можете использовать плагин DynamicController также для добавления действий к контроллерам

...