我写了一个插件,为所有控制器注入一个方法,我在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)
有效。
有人可以解释为什么会这样吗?我可以直接从视图中调用动态方法吗?
提前谢谢
答案 0 :(得分:0)
试试这个
application.controllerClasses.each {controller ->
controller.metaClass.doTestSearch = {
//Your action code here
}
}
BTW - 你也可以使用DynamicController插件向控制器添加动作
答案 1 :(得分:0)
看起来Grails无法映射运行时添加的方法的URL,但我还没有对其进行测试。