4

当它由 grails 呈现时,我必须知道视图文件。一种方法是过滤器中的 grails afterView 操作。在这里,我找不到知道渲染了哪个视图文件的方法。那么,有没有什么方法可以让我知道哪个视图文件已经被渲染方法渲染了?

4

1 回答 1

8

这并不漂亮,但在大多数情况下它应该可以工作。在after或中使用它afterView

String viewName
def webRequest = RequestContextHolder.currentRequestAttributes()
if (webRequest.renderView) {
   def controller = request.getAttribute(GrailsApplicationAttributes.CONTROLLER)
   def modelAndView = getModelAndView()
   if (!modelAndView && controller) {
      modelAndView = controller.modelAndView
   }
   if (modelAndView) {
      viewName = modelAndView.viewName
   }
   else if (controller) {
      // no ModelAndView, so infer from controller and action
      viewName = '/' + controllerName + '/' + actionName
   }
   else {
      // no controller, direct GSP
      String uri = webRequest.attributes.urlHelper.getPathWithinApplication(request)
      for (info in WebUtils.lookupUrlMappings(servletContext).matchAll(uri)) {
         if (info?.viewName) {
            viewName = info.viewName
            break
         }
      }
   }
}

您将需要这些导入:

import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes
import org.codehaus.groovy.grails.web.util.WebUtils
import org.springframework.web.context.request.RequestContextHolder
于 2013-10-25T16:55:45.767 回答