【问题标题】:Access controller request params in BootStrap.groovyBootStrap.groovy 中的访问控制器请求参数
【发布时间】:2019-12-16 16:36:01
【问题描述】:

我是 grails 的新手,我正在尝试覆盖 groovy 控制器中的重定向方法。我推荐了这个Override Grails redirect method。但我不明白如何访问并将 http 请求参数传递给 BootStrap.groovy 中的重定向覆盖。

redirect(action: "logout", params: [lang: params.lang])

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    如果您通过控制器上的元类实现包装器(就像您在链接问题中提到的那样),您可以通过实现闭包中的“委托”简单地访问“活动”控制器对象:

    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 ->
            // delegate is the instance of <controllerClass> where "redirect" just gets executed.
            // the current http request can be accessed via a getter on controller classes
            println delegate.getRequest()
            oldRedirect.invoke delegate, args
        }
    }
    

    或者,您可以使用 RequestContextHolder 获取当前 requestAttributes 并从那里提取请求(请参阅 Grails 2 中的 org.codehaus.groovy.grails.plugins.web.api.CommonWebApi.java 或 grails.web.api。 Grails 3) 中的 ServletAttributes.groovy

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 1970-01-01
      • 2013-06-27
      • 2013-05-04
      • 2017-05-10
      • 1970-01-01
      • 2018-02-10
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多