diff --git a/grails-web-common/src/main/groovy/org/codehaus/groovy/grails/web/util/WebUtils.java b/grails-web-common/src/main/groovy/org/codehaus/groovy/grails/web/util/WebUtils.java index 3d71dfd3d9d..2a8e872dada 100644 --- a/grails-web-common/src/main/groovy/org/codehaus/groovy/grails/web/util/WebUtils.java +++ b/grails-web-common/src/main/groovy/org/codehaus/groovy/grails/web/util/WebUtils.java @@ -51,6 +51,7 @@ import org.springframework.web.servlet.View; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter; +import org.springframework.web.servlet.view.UrlBasedViewResolver; import org.springframework.web.util.UrlPathHelper; /** @@ -181,6 +182,9 @@ public static String addViewPrefix(String viewName) { public static String addViewPrefix(String viewName, String controllerName) { if (!viewName.startsWith(String.valueOf(SLASH))) { + if(viewName.startsWith(UrlBasedViewResolver.REDIRECT_URL_PREFIX) || viewName.startsWith(UrlBasedViewResolver.FORWARD_URL_PREFIX)) { + return viewName; + } StringBuilder buf = new StringBuilder(); buf.append(SLASH); if (controllerName != null) { diff --git a/grails-web-gsp/src/main/groovy/org/codehaus/groovy/grails/web/servlet/view/GrailsLayoutViewResolver.java b/grails-web-gsp/src/main/groovy/org/codehaus/groovy/grails/web/servlet/view/GrailsLayoutViewResolver.java index 42e45bea092..c395873d20f 100644 --- a/grails-web-gsp/src/main/groovy/org/codehaus/groovy/grails/web/servlet/view/GrailsLayoutViewResolver.java +++ b/grails-web-gsp/src/main/groovy/org/codehaus/groovy/grails/web/servlet/view/GrailsLayoutViewResolver.java @@ -26,6 +26,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.core.Ordered; import org.springframework.web.context.ServletConfigAware; +import org.springframework.web.servlet.SmartView; import org.springframework.web.servlet.View; import org.springframework.web.servlet.ViewResolver; @@ -41,7 +42,12 @@ public GrailsLayoutViewResolver(ViewResolver innerViewResolver, GroovyPageLayout @Override public View resolveViewName(String viewName, Locale locale) throws Exception { - return new GrailsLayoutView(groovyPageLayoutFinder, innerViewResolver.resolveViewName(viewName, locale)); + View innerView = innerViewResolver.resolveViewName(viewName, locale); + if(innerView instanceof SmartView && ((SmartView)innerView).isRedirectView()) { + return innerView; + } else { + return new GrailsLayoutView(groovyPageLayoutFinder, innerView); + } } @Override