@Override @Nullable public FieldError getFieldError() { return this.source.getFieldError(); }
@Test public void testDirectBindingToEmptyIndexedFieldWithRegisteredSpecificEditor() { IndexedTestBean tb = new IndexedTestBean(); DataBinder binder = new DataBinder(tb, "tb"); binder.registerCustomEditor(TestBean.class, "map[key0]", new PropertyEditorSupport() { @Override public void setAsText(String text) throws IllegalArgumentException { DerivedTestBean tb = new DerivedTestBean(); tb.setName("array" + text); setValue(tb); } @Override public String getAsText() { return ((TestBean) getValue()).getName(); } }); Errors errors = binder.getBindingResult(); errors.rejectValue("map[key0]", "NOT_NULL", "should not be null"); assertEquals(1, errors.getFieldErrorCount("map[key0]")); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCode()); assertEquals("NOT_NULL.tb.map[key0]", errors.getFieldError("map[key0]").getCodes()[0]); assertEquals("NOT_NULL.tb.map", errors.getFieldError("map[key0]").getCodes()[1]); assertEquals("NOT_NULL.map[key0]", errors.getFieldError("map[key0]").getCodes()[2]); assertEquals("NOT_NULL.map", errors.getFieldError("map[key0]").getCodes()[3]); // This next code is only generated because of the registered editor, using the // registered type of the editor as guess for the content type of the collection. assertEquals("NOT_NULL.org.springframework.tests.sample.beans.TestBean", errors.getFieldError("map[key0]").getCodes()[4]); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCodes()[5]); }
@Test public void testValidatorWithNestedObjectNull() { TestBean tb = new TestBean(); Errors errors = new BeanPropertyBindingResult(tb, "tb"); Validator testValidator = new TestBeanValidator(); testValidator.validate(tb, errors); errors.setNestedPath("spouse."); assertEquals("spouse.", errors.getNestedPath()); Validator spouseValidator = new SpouseValidator(); spouseValidator.validate(tb.getSpouse(), errors); errors.setNestedPath(""); assertTrue(errors.hasFieldErrors("spouse")); assertEquals(1, errors.getFieldErrorCount("spouse")); assertEquals("SPOUSE_NOT_AVAILABLE", errors.getFieldError("spouse").getCode()); assertEquals("tb", (errors.getFieldErrors("spouse").get(0)).getObjectName()); assertEquals(null, (errors.getFieldErrors("spouse").get(0)).getRejectedValue()); }
@Override @Nullable public FieldError getFieldError(String field) { return escapeObjectError(this.source.getFieldError(field)); }
@Test public void testDirectBindingToEmptyIndexedFieldWithRegisteredGenericEditor() { IndexedTestBean tb = new IndexedTestBean(); DataBinder binder = new DataBinder(tb, "tb"); binder.registerCustomEditor(TestBean.class, "map", new PropertyEditorSupport() { @Override public void setAsText(String text) throws IllegalArgumentException { DerivedTestBean tb = new DerivedTestBean(); tb.setName("array" + text); setValue(tb); } @Override public String getAsText() { return ((TestBean) getValue()).getName(); } }); Errors errors = binder.getBindingResult(); errors.rejectValue("map[key0]", "NOT_NULL", "should not be null"); assertEquals(1, errors.getFieldErrorCount("map[key0]")); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCode()); assertEquals("NOT_NULL.tb.map[key0]", errors.getFieldError("map[key0]").getCodes()[0]); assertEquals("NOT_NULL.tb.map", errors.getFieldError("map[key0]").getCodes()[1]); assertEquals("NOT_NULL.map[key0]", errors.getFieldError("map[key0]").getCodes()[2]); assertEquals("NOT_NULL.map", errors.getFieldError("map[key0]").getCodes()[3]); // This next code is only generated because of the registered editor, using the // registered type of the editor as guess for the content type of the collection. assertEquals("NOT_NULL.org.springframework.tests.sample.beans.TestBean", errors.getFieldError("map[key0]").getCodes()[4]); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCodes()[5]); }
@Override @Nullable public FieldError getFieldError() { return this.source.getFieldError(); }
assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCode()); assertEquals("NOT_ROD.tb.array[0]", errors.getFieldError("array[0]").getCodes()[0]); assertEquals("NOT_ROD.tb.array", errors.getFieldError("array[0]").getCodes()[1]); assertEquals("NOT_ROD.array[0]", errors.getFieldError("array[0]").getCodes()[2]); assertEquals("NOT_ROD.array", errors.getFieldError("array[0]").getCodes()[3]); assertEquals("NOT_ROD.org.springframework.tests.sample.beans.DerivedTestBean", errors.getFieldError("array[0]").getCodes()[4]); assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCodes()[5]); assertEquals("arraya", errors.getFieldValue("array[0]"));
@Override @Nullable public FieldError getFieldError(String field) { return escapeObjectError(this.source.getFieldError(field)); }
@RequestMapping("/myPath4.do") public void myHandle(TestBean tb, Errors errors, HttpServletResponse response) throws IOException { response.getWriter().write("test-" + tb.getName() + "-" + errors.getFieldError("age").getCode()); } }
@RequestMapping("/myPath4.*") public void myHandle(TestBean tb, Errors errors, HttpServletResponse response) throws IOException { response.getWriter().write("test-" + tb.getName() + "-" + errors.getFieldError("age").getCode()); } }
@RequestMapping("/myPath4.*") public void myHandle(TestBean tb, Errors errors, HttpServletResponse response) throws IOException { response.getWriter().write("test-" + tb.getName() + "-" + errors.getFieldError("age").getCode()); }
if (errors.hasFieldErrors("age")) { response.getWriter() .write(viewName + "-" + tb.getName() + "-" + errors.getFieldError("age").getCode() + "-" + testBeans.get(0).getName() + "-" + model.get("myKey") + (model.containsKey("yourKey") ? "-" + model.get("yourKey") : ""));
@Test public void testValidationUtilsEmptyVariants() { TestBean tb = new TestBean(); Errors errors = new BeanPropertyBindingResult(tb, "tb"); ValidationUtils.rejectIfEmpty(errors, "name", "EMPTY_OR_WHITESPACE", new Object[] {"arg"}); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode()); assertEquals("arg", errors.getFieldError("name").getArguments()[0]); errors = new BeanPropertyBindingResult(tb, "tb"); ValidationUtils.rejectIfEmpty(errors, "name", "EMPTY_OR_WHITESPACE", new Object[] {"arg"}, "msg"); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode()); assertEquals("arg", errors.getFieldError("name").getArguments()[0]); assertEquals("msg", errors.getFieldError("name").getDefaultMessage()); }
@Test public void testValidationUtilsEmptyOrWhitespaceVariants() { TestBean tb = new TestBean(); tb.setName(" "); Errors errors = new BeanPropertyBindingResult(tb, "tb"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "EMPTY_OR_WHITESPACE", new Object[] {"arg"}); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode()); assertEquals("arg", errors.getFieldError("name").getArguments()[0]); errors = new BeanPropertyBindingResult(tb, "tb"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "EMPTY_OR_WHITESPACE", new Object[] {"arg"}, "msg"); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode()); assertEquals("arg", errors.getFieldError("name").getArguments()[0]); assertEquals("msg", errors.getFieldError("name").getDefaultMessage()); }
@Test public void testAddAllErrors() { TestBean rod = new TestBean(); DataBinder binder = new DataBinder(rod, "person"); MutablePropertyValues pvs = new MutablePropertyValues(); pvs.add("age", "32x"); binder.bind(pvs); Errors errors = binder.getBindingResult(); BeanPropertyBindingResult errors2 = new BeanPropertyBindingResult(rod, "person"); errors.rejectValue("name", "badName"); errors.addAllErrors(errors2); FieldError ageError = errors.getFieldError("age"); assertEquals("typeMismatch", ageError.getCode()); FieldError nameError = errors.getFieldError("name"); assertEquals("badName", nameError.getCode()); }
@Test public void testValidationUtilsNull() throws Exception { TestBean tb = new TestBean(); Errors errors = new BeanPropertyBindingResult(tb, "tb"); Validator testValidator = new EmptyValidator(); testValidator.validate(tb, errors); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY", errors.getFieldError("name").getCode()); }
@Test public void testValidationUtilsEmpty() throws Exception { TestBean tb = new TestBean(""); Errors errors = new BeanPropertyBindingResult(tb, "tb"); Validator testValidator = new EmptyValidator(); testValidator.validate(tb, errors); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY", errors.getFieldError("name").getCode()); }
@Test public void testInvokeValidatorSunnyDay() throws Exception { TestBean tb = new TestBean(); Errors errors = new BeanPropertyBindingResult(tb, "tb"); ValidationUtils.invokeValidator(new EmptyValidator(), tb, errors); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY", errors.getFieldError("name").getCode()); }
@Test public void testBindingErrors() { TestBean rod = new TestBean(); DataBinder binder = new DataBinder(rod, "person"); MutablePropertyValues pvs = new MutablePropertyValues(); pvs.add("age", "32x"); binder.bind(pvs); Errors errors = binder.getBindingResult(); FieldError ageError = errors.getFieldError("age"); assertEquals("typeMismatch", ageError.getCode()); ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("org.springframework.validation.messages1"); String msg = messageSource.getMessage(ageError, Locale.getDefault()); assertEquals("Field age did not have correct type", msg); messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("org.springframework.validation.messages2"); msg = messageSource.getMessage(ageError, Locale.getDefault()); assertEquals("Field Age did not have correct type", msg); messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("org.springframework.validation.messages3"); msg = messageSource.getMessage(ageError, Locale.getDefault()); assertEquals("Field Person Age did not have correct type", msg); }
@Test public void testValidationUtilsEmptyOrWhitespace() throws Exception { TestBean tb = new TestBean(); Validator testValidator = new EmptyOrWhitespaceValidator(); // Test null Errors errors = new BeanPropertyBindingResult(tb, "tb"); testValidator.validate(tb, errors); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode()); // Test empty String tb.setName(""); errors = new BeanPropertyBindingResult(tb, "tb"); testValidator.validate(tb, errors); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode()); // Test whitespace String tb.setName(" "); errors = new BeanPropertyBindingResult(tb, "tb"); testValidator.validate(tb, errors); assertTrue(errors.hasFieldErrors("name")); assertEquals("EMPTY_OR_WHITESPACE", errors.getFieldError("name").getCode()); // Test OK tb.setName("Roddy"); errors = new BeanPropertyBindingResult(tb, "tb"); testValidator.validate(tb, errors); assertFalse(errors.hasFieldErrors("name")); }