diff --git a/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java b/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java index 84e4e112..79b08a9d 100644 --- a/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java +++ b/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java @@ -74,9 +74,9 @@ public class MessageContextErrors extends AbstractErrors { } public void reject(String errorCode, Object[] errorArgs, String defaultMessage) { - String[] messageCodes = bindingErrorMessageCodesResolver.resolveMessageCodes(errorCode, defaultMessage); - messageContext.addMessage(new MessageBuilder().error().codes(messageCodes).args(errorArgs).defaultText( - defaultMessage).build()); + String[] messageCodes = bindingErrorMessageCodesResolver.resolveMessageCodes(errorCode, objectName); + messageContext.addMessage(new MessageBuilder().error().codes(messageCodes).args(errorArgs) + .defaultText(defaultMessage).build()); } public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) { @@ -88,8 +88,13 @@ public class MessageContextErrors extends AbstractErrors { } else { fieldType = null; } - String[] messageCodes = bindingErrorMessageCodesResolver.resolveMessageCodes(errorCode, defaultMessage, field, - fieldType); + String[] messageCodes; + if (StringUtils.hasLength(field)) { + messageCodes = bindingErrorMessageCodesResolver + .resolveMessageCodes(errorCode, objectName, field, fieldType); + } else { + messageCodes = bindingErrorMessageCodesResolver.resolveMessageCodes(errorCode, objectName); + } messageContext.addMessage(new MessageBuilder().error().source(field).codes(messageCodes).args(errorArgs) .defaultText(defaultMessage).build()); } diff --git a/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsMessageCodesTests.java b/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsMessageCodesTests.java new file mode 100644 index 00000000..c58ca4d4 --- /dev/null +++ b/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsMessageCodesTests.java @@ -0,0 +1,61 @@ +package org.springframework.binding.message; + +import java.util.Locale; + +import junit.framework.TestCase; + +import org.easymock.EasyMock; +import org.springframework.context.support.StaticMessageSource; +import org.springframework.validation.MessageCodesResolver; + +public class MessageContextErrorsMessageCodesTests extends TestCase { + + private DefaultMessageContext context; + + private String errorCode = "bar"; + + private String objectName = "object"; + + private MessageCodesResolver resolver; + + @Override + protected void setUp() throws Exception { + StaticMessageSource messageSource = new StaticMessageSource(); + messageSource.addMessage(errorCode, Locale.getDefault(), "doesntmatter"); + context = new DefaultMessageContext(messageSource); + + resolver = EasyMock.createMock(MessageCodesResolver.class); + } + + public void testRejectUsesObjectName() throws Exception { + EasyMock.expect(resolver.resolveMessageCodes(errorCode, objectName)).andReturn(new String[] {}); + EasyMock.replay(resolver); + + Object object = new Object(); + MessageContextErrors errors = new MessageContextErrors(context, objectName, object, null, resolver, null); + errors.reject(errorCode, "doesntmatter"); + + EasyMock.verify(resolver); + } + + public void testRejectValueUsesObjectName() throws Exception { + EasyMock.expect(resolver.resolveMessageCodes(errorCode, objectName, "field", null)).andReturn(new String[] {}); + EasyMock.replay(resolver); + + MessageContextErrors errors = new MessageContextErrors(context, objectName, new Object(), null, resolver, null); + errors.rejectValue("field", errorCode, new Object[] {}, "doesntmatter"); + + EasyMock.verify(resolver); + } + + public void testRejectValueEmptyField() throws Exception { + EasyMock.expect(resolver.resolveMessageCodes(errorCode, objectName)).andReturn(new String[] {}); + EasyMock.replay(resolver); + + MessageContextErrors errors = new MessageContextErrors(context, objectName, new Object(), null, resolver, null); + errors.rejectValue(null, errorCode, new Object[] {}, "doesntmatter"); + + EasyMock.verify(resolver); + } + +} diff --git a/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java b/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java index b5bf9668..4faac37c 100644 --- a/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java @@ -12,15 +12,24 @@ import org.springframework.validation.DefaultMessageCodesResolver; import org.springframework.validation.MapBindingResult; public class MessageContextErrorsTests extends TestCase { - public void testReject() { + + private DefaultMessageContext context; + private MessageContextErrors errors; + + @Override + protected void setUp() throws Exception { StaticMessageSource messageSource = new StaticMessageSource(); messageSource.addMessage("foo", Locale.getDefault(), "bar"); messageSource.addMessage("bar", Locale.getDefault(), "{0}"); - DefaultMessageContext context = new DefaultMessageContext(messageSource); - Object object = new Object(); - MessageContextErrors errors = new MessageContextErrors(context, "object", object, null, - new DefaultMessageCodesResolver(), null); + context = new DefaultMessageContext(messageSource); + + SpringELExpressionParser parser = new SpringELExpressionParser(new SpelExpressionParser()); + DefaultMessageCodesResolver resolver = new DefaultMessageCodesResolver(); + errors = new MessageContextErrors(context, "object", new Object(), parser, resolver, null); + } + + public void testReject() { errors.reject("foo"); errors.reject("bogus", "baz"); errors.reject("bar", new Object[] { "boop" }, null); @@ -42,44 +51,27 @@ public class MessageContextErrorsTests extends TestCase { } public void testRejectValue() { - StaticMessageSource messageSource = new StaticMessageSource(); - messageSource.addMessage("foo", Locale.getDefault(), "bar"); - messageSource.addMessage("bar", Locale.getDefault(), "{0}"); - - DefaultMessageContext context = new DefaultMessageContext(messageSource); - Object object = new Object(); - MessageContextErrors errors = new MessageContextErrors(context, "object", object, null, - new DefaultMessageCodesResolver(), null); - errors.rejectValue("field", "foo"); - errors.rejectValue("field", "bogus", "baz"); - errors.rejectValue("field", "bar", new Object[] { "boop" }, null); + errors.rejectValue("class", "foo"); + errors.rejectValue("class", "bogus", "baz"); + errors.rejectValue("class", "bar", new Object[] { "boop" }, null); Message msg = context.getAllMessages()[0]; - assertEquals("field", msg.getSource()); + assertEquals("class", msg.getSource()); assertEquals("bar", msg.getText()); assertEquals(Severity.ERROR, msg.getSeverity()); msg = context.getAllMessages()[1]; - assertEquals("field", msg.getSource()); + assertEquals("class", msg.getSource()); assertEquals("baz", msg.getText()); assertEquals(Severity.ERROR, msg.getSeverity()); msg = context.getAllMessages()[2]; - assertEquals("field", msg.getSource()); + assertEquals("class", msg.getSource()); assertEquals("boop", msg.getText()); assertEquals(Severity.ERROR, msg.getSeverity()); } public void testGlobalError() { - StaticMessageSource messageSource = new StaticMessageSource(); - messageSource.addMessage("foo", Locale.getDefault(), "bar"); - messageSource.addMessage("bar", Locale.getDefault(), "{0}"); - - DefaultMessageContext context = new DefaultMessageContext(messageSource); - Object object = new Object(); - SpringELExpressionParser expressionParser = new SpringELExpressionParser(new SpelExpressionParser()); - MessageContextErrors errors = new MessageContextErrors(context, "object", object, expressionParser, - new DefaultMessageCodesResolver(), null); errors.rejectValue(null, "bar", new Object[] { "boop" }, null); Message msg = context.getAllMessages()[0]; assertEquals("", msg.getSource()); @@ -88,14 +80,6 @@ public class MessageContextErrorsTests extends TestCase { } public void testAddAllErrors() { - StaticMessageSource messageSource = new StaticMessageSource(); - messageSource.addMessage("foo", Locale.getDefault(), "bar"); - messageSource.addMessage("bar", Locale.getDefault(), "{0}"); - - DefaultMessageContext context = new DefaultMessageContext(messageSource); - Object object = new Object(); - MessageContextErrors errors = new MessageContextErrors(context, "object", object, null, - new DefaultMessageCodesResolver(), null); MapBindingResult result = new MapBindingResult(new HashMap(), "object"); result.reject("bar", new Object[] { "boop" }, null); result.rejectValue("field", "bar", new Object[] { "boop" }, null);