当它由 grails 呈现时,我必须知道视图文件。一种方法是过滤器中的 grails afterView 操作。在这里,我找不到知道渲染了哪个视图文件的方法。那么,有没有什么方法可以让我知道哪个视图文件已经被渲染方法渲染了?
问问题
1300 次
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 回答