grails 重写重定向控制器方法

2024-05-15

我试图覆盖默认的控制器重定向方法,但似乎无法让以下代码正常工作。

我创建了一个插件,我正在尝试使用“doWithDynamicMethods”来替换重定向。

def doWithDynamicMethods = {ctx ->
   application.controllerClasses.each() { controllerClass ->
      replaceRedirectMethod(controllerClass)
   }
}

void replaceRedirectMethod(controllerClass) {
   def oldRedirect = controllerClass.metaClass.pickMethod("redirect", [Map] as Class[])
   controllerClass.metaClass.redirect = { Map args, Map params ->
      // never seems to get here    
   }
}

我的签名是错误的还是我遗漏了什么?我这样做的原因是,如果满足特定条件,我想更改重定向的 uri,但通过日志记录/打印语句,我看到它在应用程序启动/编译时进入“replaceRedirectMethod”,但它并没有应用程序启动后,通过控制器进行重定向时,不要进入那里。


是的,签名错误 - 重定向需要一个Map参数(参见中的声明org.codehaus.groovy.grails.plugins.web.ControllersGrailsPlugin.registerControllerMethods())

所以应该是

controllerClass.metaClass.redirect = { Map args ->
   // pre-redirect logic
   oldRedirect.invoke delegate, args
   // post-redirect logic
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

grails 重写重定向控制器方法 的相关文章

随机推荐