Browse Source

Ensure RedirectModel is initialized

This commit fixes an old bug in ModelAndViewContainer where getModel
returns a new ModelMap instance that isn't saved and re-used.

Issue: SPR-14045
pull/1007/head
Rossen Stoyanchev 9 years ago
parent
commit
582864802e
  1. 5
      spring-web/src/main/java/org/springframework/web/method/support/ModelAndViewContainer.java
  2. 13
      spring-web/src/test/java/org/springframework/web/method/support/ModelAndViewContainerTests.java
  3. 16
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ModelAndViewMethodReturnValueHandlerTests.java

5
spring-web/src/main/java/org/springframework/web/method/support/ModelAndViewContainer.java

@ -134,7 +134,10 @@ public class ModelAndViewContainer { @@ -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;
}
}

13
spring-web/src/test/java/org/springframework/web/method/support/ModelAndViewContainerTests.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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"));
}
}

16
spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ModelAndViewMethodReturnValueHandlerTests.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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);

Loading…
Cancel
Save