ModelAttributeMethodProcessor detects re-enabled binding declaration

Issue: SPR-16083
This commit is contained in:
Juergen Hoeller
2017-10-18 12:31:22 +02:00
parent ea00c7c6c8
commit bec1fc1852
4 changed files with 96 additions and 43 deletions

View File

@@ -146,6 +146,7 @@ import static org.junit.Assert.*;
/**
* @author Rossen Stoyanchev
* @author Juergen Hoeller
*/
public class ServletAnnotationControllerHandlerMethodTests extends AbstractServletHandlerMethodTests {
@@ -535,6 +536,20 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl
assertEquals("myPath-name1-typeMismatch-tb1-myValue-yourValue", response.getContentAsString());
}
@Test
public void lateBindingFormController() throws Exception {
initServlet(
wac -> wac.registerBeanDefinition("viewResolver", new RootBeanDefinition(TestViewResolver.class)),
LateBindingFormController.class);
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/myPath.do");
request.addParameter("name", "name1");
request.addParameter("age", "value2");
MockHttpServletResponse response = new MockHttpServletResponse();
getServlet().service(request, response);
assertEquals("myView-name1-typeMismatch-tb1-myValue", response.getContentAsString());
}
@Test
public void proxiedFormController() throws Exception {
initServlet(wac -> {
@@ -2224,6 +2239,29 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl
}
}
@Controller
public static class LateBindingFormController {
@ModelAttribute("testBeanList")
public List<TestBean> getTestBeans(@ModelAttribute(name="myCommand", binding=false) TestBean tb) {
List<TestBean> list = new LinkedList<>();
list.add(new TestBean("tb1"));
list.add(new TestBean("tb2"));
return list;
}
@RequestMapping("/myPath.do")
public String myHandle(@ModelAttribute(name="myCommand", binding=true) TestBean tb, BindingResult errors, ModelMap model) {
FieldError error = errors.getFieldError("age");
assertNotNull("Must have field error for age property", error);
assertEquals("value2", error.getRejectedValue());
if (!model.containsKey("myKey")) {
model.addAttribute("myKey", "myValue");
}
return "myView";
}
}
@Controller
static class MyCommandProvidingFormController<T, TB, TB2> extends MyFormController {