WW-4202 Solves problem with using wrong TextProvider for ModelDriven
Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/a6017dca Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/a6017dca Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/a6017dca Branch: refs/heads/develop Commit: a6017dcac42123cc41144d0d607210aa7d7c8907 Parents: 3e2c60f Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Fri Mar 28 07:49:31 2014 +0100 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Fri Mar 28 07:49:31 2014 +0100 ---------------------------------------------------------------------- .../validator/DelegatingValidatorContext.java | 21 +++++++++++++++++++- .../validator/VisitorFieldValidatorTest.java | 2 +- .../TestBean-beanMessageBundle-validation.xml | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/a6017dca/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java ---------------------------------------------------------------------- diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java index b3f1433..6807926 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java @@ -181,13 +181,32 @@ public class DelegatingValidatorContext implements ValidatorContext { public static TextProvider makeTextProvider(Object object, LocaleProvider localeProvider) { // the object argument passed through here will most probably be an ActionSupport decendant which does // implements TextProvider. + if (object != null && object instanceof DelegatingValidatorContext) { + return ((DelegatingValidatorContext) object).getTextProvider(); + } else if (localeProvider != null && localeProvider instanceof DelegatingValidatorContext) { + return ((DelegatingValidatorContext) localeProvider).getTextProvider(); + } + if ((object != null) && (object instanceof TextProvider)) { + if (object instanceof CompositeTextProvider) { + return (CompositeTextProvider) object; + } return new CompositeTextProvider(new TextProvider[]{ ((TextProvider) object), new TextProviderSupport(object.getClass(), localeProvider) }); + } else if (localeProvider != null && localeProvider instanceof TextProvider) { + if (localeProvider instanceof CompositeTextProvider) { + return (CompositeTextProvider) localeProvider; + } + return new CompositeTextProvider(new TextProvider[]{ + ((TextProvider) localeProvider), + new TextProviderSupport(localeProvider.getClass(), localeProvider) + }); } else { - return new TextProviderFactory().createInstance(object.getClass(), localeProvider); + return new TextProviderFactory().createInstance( + object != null ? object.getClass() : DelegatingValidatorContext.class, + localeProvider); } } http://git-wip-us.apache.org/repos/asf/struts/blob/a6017dca/xwork-core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java ---------------------------------------------------------------------- diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java index 8f9acd1..3c47725 100644 --- a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java +++ b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java @@ -105,7 +105,7 @@ public class VisitorFieldValidatorTest extends XWorkTestCase { assertEquals(1, beanCountMessages.size()); String beanCountMessage = beanCountMessages.get(0); - assertEquals("bean: Count must be between 1 and 100, current value is -1.", beanCountMessage); + assertEquals("bean: Invalid count value, must be between 1 and 100, current value -1!", beanCountMessage); } public void testCollectionValidation() throws Exception { http://git-wip-us.apache.org/repos/asf/struts/blob/a6017dca/xwork-core/src/test/resources/com/opensymphony/xwork2/TestBean-beanMessageBundle-validation.xml ---------------------------------------------------------------------- diff --git a/xwork-core/src/test/resources/com/opensymphony/xwork2/TestBean-beanMessageBundle-validation.xml b/xwork-core/src/test/resources/com/opensymphony/xwork2/TestBean-beanMessageBundle-validation.xml index bed256a..4e0a3df 100644 --- a/xwork-core/src/test/resources/com/opensymphony/xwork2/TestBean-beanMessageBundle-validation.xml +++ b/xwork-core/src/test/resources/com/opensymphony/xwork2/TestBean-beanMessageBundle-validation.xml @@ -4,7 +4,7 @@ <field-validator type="int" short-circuit="true"> <param name="min">1</param> <param name="max">100</param> - <message key="invalid.count">Invalid Count!</message> + <message key="invalid.count">Invalid count value, must be between ${min} and ${max}, current value ${count}!</message> </field-validator> <field-validator type="int"> <param name="min">20</param>