SPR-2733 Improvement for handling checkboxes in web forms (patch included)

Introduced default field prefix of '!', which can be overridden with WebDataBinder#setFieldDefaultPrefix.  If a field is otherwise not present, the default value is used for the field.  Field markers for the same field are ignored.
This commit is contained in:
Scott Andrews
2009-01-23 00:03:33 +00:00
parent 8e261e5833
commit 61b5428211
2 changed files with 121 additions and 2 deletions

View File

@@ -34,6 +34,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
* @author Rod Johnson
* @author Juergen Hoeller
* @author Chris Beams
* @author Scott Andrews
*/
public class ServletRequestDataBinderTests {
@@ -90,6 +91,59 @@ public class ServletRequestDataBinderTests {
assertFalse(target.isPostProcessed());
}
@Test
public void testFieldDefault() throws Exception {
TestBean target = new TestBean();
ServletRequestDataBinder binder = new ServletRequestDataBinder(target);
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("!postProcessed", "off");
request.addParameter("postProcessed", "on");
binder.bind(request);
assertTrue(target.isPostProcessed());
request.removeParameter("postProcessed");
binder.bind(request);
assertFalse(target.isPostProcessed());
}
@Test
public void testFieldDefaultPreemptsFieldMarker() throws Exception {
TestBean target = new TestBean();
ServletRequestDataBinder binder = new ServletRequestDataBinder(target);
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("!postProcessed", "on");
request.addParameter("_postProcessed", "visible");
request.addParameter("postProcessed", "on");
binder.bind(request);
assertTrue(target.isPostProcessed());
request.removeParameter("postProcessed");
binder.bind(request);
assertTrue(target.isPostProcessed());
request.removeParameter("!postProcessed");
binder.bind(request);
assertFalse(target.isPostProcessed());
}
@Test
public void testFieldDefaultNonBoolean() throws Exception {
TestBean target = new TestBean();
ServletRequestDataBinder binder = new ServletRequestDataBinder(target);
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("!name", "anonymous");
request.addParameter("name", "Scott");
binder.bind(request);
assertEquals("Scott", target.getName());
request.removeParameter("name");
binder.bind(request);
assertEquals("anonymous", target.getName());
}
@Test
public void testWithCommaSeparatedStringArray() throws Exception {
TestBean target = new TestBean();