Skip to content

Commit c3732ab

Browse files
committed
only return the model for an async request if it is not in an error state
1 parent cea0ffd commit c3732ab

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

grails-web-common/src/main/groovy/org/grails/web/util/WebUtils.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
6565
public static final String GRAILS_DISPATCH_EXTENSION = ".dispatch";
6666
public static final String GRAILS_SERVLET_PATH = "/grails";
6767
public static final String EXCEPTION_ATTRIBUTE = "exception";
68+
public static final String ASYNC_REQUEST_URI_ATTRIBUTE = "javax.servlet.async.request_uri";
6869

6970
public static ViewResolver lookupViewResolver(ServletContext servletContext) {
7071
WebApplicationContext wac = WebApplicationContextUtils
@@ -485,6 +486,25 @@ public static boolean isForward(HttpServletRequest request) {
485486
return request.getAttribute(FORWARD_REQUEST_URI_ATTRIBUTE) != null;
486487
}
487488

489+
/**
490+
* Check whether the given request is a forward request
491+
*
492+
* @param request The request
493+
* @return True if it is a forward request
494+
*/
495+
public static boolean isAsync(HttpServletRequest request) {
496+
return request.getAttribute(ASYNC_REQUEST_URI_ATTRIBUTE) != null;
497+
}
498+
499+
/**
500+
* Check whether the given request is a forward request
501+
*
502+
* @param request The request
503+
* @return True if it is a forward request
504+
*/
505+
public static boolean isError(HttpServletRequest request) {
506+
return request.getAttribute(ERROR_STATUS_CODE_ATTRIBUTE) != null;
507+
}
488508
/**
489509
* Check whether the given request is an include request
490510
*

grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/mvc/UrlMappingsInfoHandlerAdapter.groovy

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import groovy.transform.CompileStatic
1010
import org.grails.web.servlet.mvc.ActionResultTransformer
1111
import org.grails.web.servlet.mvc.GrailsWebRequest
1212
import org.grails.web.util.GrailsApplicationAttributes
13+
import org.grails.web.util.WebUtils
1314
import org.springframework.context.ApplicationContext
1415
import org.springframework.context.ApplicationContextAware
1516
import org.springframework.web.servlet.HandlerAdapter
@@ -28,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap
2829
@CompileStatic
2930
class UrlMappingsInfoHandlerAdapter implements HandlerAdapter, ApplicationContextAware{
3031

31-
private static final String ASYNC_REQUEST_URI_ATTR = "javax.servlet.async.request_uri"
32+
3233
ApplicationContext applicationContext
3334

3435
protected Collection<ActionResultTransformer> actionResultTransformers = Collections.emptyList();
@@ -51,7 +52,7 @@ class UrlMappingsInfoHandlerAdapter implements HandlerAdapter, ApplicationContex
5152

5253
GrailsWebRequest webRequest = GrailsWebRequest.lookup(request)
5354

54-
boolean isAsyncRequest = request.getAttribute(ASYNC_REQUEST_URI_ATTR) != null;
55+
boolean isAsyncRequest = WebUtils.isAsync(request) && !WebUtils.isError(request);
5556
if(isAsyncRequest) {
5657
Object modelAndView = request.getAttribute(GrailsApplicationAttributes.MODEL_AND_VIEW);
5758
if(modelAndView instanceof ModelAndView) {

0 commit comments

Comments
 (0)