diff --git a/spring-web/src/main/java/org/springframework/web/method/support/ModelAndViewContainer.java b/spring-web/src/main/java/org/springframework/web/method/support/ModelAndViewContainer.java index 3c56335672..0238e6270e 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/ModelAndViewContainer.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/ModelAndViewContainer.java @@ -134,7 +134,10 @@ public class ModelAndViewContainer { return this.defaultModel; } else { - return (this.redirectModel != null) ? this.redirectModel : new ModelMap(); + if (this.redirectModel == null) { + this.redirectModel = new ModelMap(); + } + return this.redirectModel; } } diff --git a/spring-web/src/test/java/org/springframework/web/method/support/ModelAndViewContainerTests.java b/spring-web/src/test/java/org/springframework/web/method/support/ModelAndViewContainerTests.java index 114c6712d8..c5f481e0e2 100644 --- a/spring-web/src/test/java/org/springframework/web/method/support/ModelAndViewContainerTests.java +++ b/spring-web/src/test/java/org/springframework/web/method/support/ModelAndViewContainerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -76,4 +76,15 @@ public class ModelAndViewContainerTests { assertTrue(this.mavContainer.getModel().isEmpty()); } + @Test // SPR-14045 + public void ignoreDefaultModelAndWithoutRedirectModel() { + this.mavContainer.setIgnoreDefaultModelOnRedirect(true); + this.mavContainer.setRedirectModelScenario(true); + this.mavContainer.addAttribute("name", "value"); + + assertEquals(1, this.mavContainer.getModel().size()); + assertEquals("value", this.mavContainer.getModel().get("name")); + } + + } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ModelAndViewMethodReturnValueHandlerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ModelAndViewMethodReturnValueHandlerTests.java index 38807604aa..7b245cfaa2 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ModelAndViewMethodReturnValueHandlerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ModelAndViewMethodReturnValueHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -143,6 +143,20 @@ public class ModelAndViewMethodReturnValueHandlerTests { assertNotSame("RedirectAttributes should not be used if controller doesn't redirect", redirectAttributes, model); } + @Test // SPR-14045 + public void handleRedirectWithIgnoreDefaultModel() throws Exception { + mavContainer.setIgnoreDefaultModelOnRedirect(true); + + RedirectView redirectView = new RedirectView(); + ModelAndView mav = new ModelAndView(redirectView, "name", "value"); + handler.handleReturnValue(mav, returnParamModelAndView, mavContainer, webRequest); + + ModelMap model = mavContainer.getModel(); + assertSame(redirectView, mavContainer.getView()); + assertEquals(1, model.size()); + assertEquals("value", model.get("name")); + } + private MethodParameter getReturnValueParam(String methodName) throws Exception { Method method = getClass().getDeclaredMethod(methodName);