@@ -28,6 +28,9 @@ import org.springframework.web.context.request.WebRequest
2828import org.springframework.web.filter.OncePerRequestFilter
2929
3030import javax.servlet.RequestDispatcher
31+ import javax.servlet.http.HttpServletRequest
32+ import javax.servlet.http.HttpServletResponse
33+
3134/**
3235 * A Trait for classes that forward the request
3336 *
@@ -88,28 +91,37 @@ trait RequestForwarder implements WebAttributes {
8891 }
8992 }
9093
91- def model = params. model instanceof Map ? params. model : Collections . EMPTY_MAP
94+ Map model = params. model instanceof Map ? ( Map ) params. model : Collections . EMPTY_MAP
9295
93- def request = webRequest. currentRequest
94- def response = webRequest. currentResponse
96+ HttpServletRequest request = webRequest. currentRequest
97+ HttpServletResponse response = webRequest. currentResponse
9598
9699 WebUtils . exposeRequestAttributes(request, (Map )model);
97100
98101 request. setAttribute(GrailsApplicationAttributes . FORWARD_IN_PROGRESS , true )
99102 params. includeContext = false
100- def fowardURI = lookupLinkGenerator(). link(params)
103+ String fowardURI = lookupLinkGenerator(). link(params)
101104
102105
103106 RequestDispatcher dispatcher = request. getRequestDispatcher(fowardURI)
104107
105- def requestScope = WebRequest . SCOPE_REQUEST
108+ int requestScope = WebRequest . SCOPE_REQUEST
106109 webRequest. removeAttribute(GrailsApplicationAttributes . MODEL_AND_VIEW , requestScope)
107110 webRequest. removeAttribute(GrailsApplicationAttributes . GRAILS_CONTROLLER_CLASS_AVAILABLE , requestScope)
108111 webRequest. removeAttribute(UrlMappingsHandlerMapping . MATCHED_REQUEST , requestScope)
109112 webRequest. removeAttribute(WebUtils . ERROR_STATUS_CODE_ATTRIBUTE , requestScope)
110113 webRequest. removeAttribute(" grailsWebRequestFilter" + OncePerRequestFilter . ALREADY_FILTERED_SUFFIX , requestScope)
111- dispatcher. forward(request, response);
112- request. setAttribute(GrailsApplicationAttributes . FORWARD_ISSUED , true )
114+ try {
115+ dispatcher. forward(request, response)
116+ request. setAttribute(GrailsApplicationAttributes . FORWARD_ISSUED , true )
117+ } finally {
118+ // cleanup after forward
119+ webRequest. removeAttribute(GrailsApplicationAttributes . MODEL_AND_VIEW , requestScope)
120+ webRequest. removeAttribute(GrailsApplicationAttributes . GRAILS_CONTROLLER_CLASS_AVAILABLE , requestScope)
121+ webRequest. removeAttribute(UrlMappingsHandlerMapping . MATCHED_REQUEST , requestScope)
122+ webRequest. removeAttribute(WebUtils . ERROR_STATUS_CODE_ATTRIBUTE , requestScope)
123+ webRequest. removeAttribute(" grailsWebRequestFilter" + OncePerRequestFilter . ALREADY_FILTERED_SUFFIX , requestScope)
124+ }
113125 return fowardURI
114126 }
115127
0 commit comments