我在网址中携带Grails应用程序的区域设置,例如
http://myapp.com/LANG/controller/action/id
因此,我使用language属性调整了URLMappings.groovy。由于我想保存工作并且不在每个链接上应用lang参数,因此我使用params.lang中的语言覆盖了g:link taglib。这非常好。
当我从控制器进行重定向时,例如
redirect(action: "logout")
我想自动附加params.lang而不是每次都写
redirect(action: "logout", params: [lang: params.lang])
我找到了帖子grails override redirect controller method,但我不确定如何继续。这段代码在哪里参与?
如何覆盖redirect()方法并添加params.lang-attribute?
请指教,非常感谢。
答案 0 :(得分:1)
在您的应用程序中执行此操作的最简单方法是使用一些元编程,并为您的Grails应用程序使用BootStrap.groovy
。以下只是一个简单的例子:
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes
class BootStrap {
def init = { servletContext ->
def ctx = servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT)
def app = ctx.getBean("grailsApplication")
app.controllerClasses.each() { controllerClass ->
def oldRedirect = controllerClass.metaClass.pickMethod("redirect", [Map] as Class[])
controllerClass.metaClass.redirect = { Map args ->
// new pre-redirect logic
if (!args['params']) args['params'] = [:] // just in case redirect was called without any parameters
args['params']['whatever'] = 'something' // add something into the parameters map
oldRedirect.invoke delegate, args
// new post-redirect logic
}
}
}
def destroy = {
}
}
上面的示例只是在Grails应用程序中的所有控制器上包含redirect
的实现,并注入一个名为whatever
的新参数,其值为something
。
使用Grails 2.4.2(快速)测试上述内容。