Updated Branches: refs/heads/master ef175ac2b -> 349ef6220
FIXED - TAP5-2101: BeanEditor should always provide a new BeanValidationContext (JSR-303) - apply Alejandro Scandroli's patch for a patch, edit and validation context getting out of sync on submit, BeanEditContext.getBeanClass() != BeanValidationContext.getBeanType() Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/349ef622 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/349ef622 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/349ef622 Branch: refs/heads/master Commit: 349ef622030ed5f1bfb098829321f753b4e19843 Parents: ef175ac Author: kaosko <[email protected]> Authored: Tue Apr 23 10:29:19 2013 -0700 Committer: kaosko <[email protected]> Committed: Tue Apr 23 10:29:19 2013 -0700 ---------------------------------------------------------------------- .../tapestry5/corelib/components/BeanEditor.java | 30 ++------------- .../tapestry5/internal/BeanEditContextImpl.java | 26 +++++++++++++ .../corelib/components/BeanEditorTest.java | 1 + 3 files changed, 31 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/349ef622/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java index 94c37b9..03344fe 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java @@ -23,6 +23,7 @@ import org.apache.tapestry5.annotations.Parameter; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.annotations.SupportsInformalParameters; import org.apache.tapestry5.beaneditor.BeanModel; +import org.apache.tapestry5.internal.BeanEditContextImpl; import org.apache.tapestry5.internal.BeanValidationContext; import org.apache.tapestry5.internal.BeanValidationContextImpl; import org.apache.tapestry5.internal.beaneditor.BeanModelUtils; @@ -166,10 +167,7 @@ public class BeanEditor */ private Object cachedObject; - private BeanValidationContext originalBeanValidationContext; - // Needed for testing as well - public Object getObject() { return cachedObject; @@ -217,39 +215,19 @@ public class BeanEditor } } - BeanEditContext context = new BeanEditContext() - { - public Class<?> getBeanClass() - { - return model.getBeanType(); - } - - public <T extends Annotation> T getAnnotation(Class<T> type) - { - return getBeanClass().getAnnotation(type); - } - }; + BeanEditContext context = new BeanEditContextImpl(model.getBeanType()); cachedObject = object; environment.push(BeanEditContext.class, context); - // Always provide a new BeanValidationContext - originalBeanValidationContext = environment.push(BeanValidationContext.class, - new BeanValidationContextImpl(object)); - + // TAP5-2101: Always provide a new BeanValidationContext + environment.push(BeanValidationContext.class, new BeanValidationContextImpl(object)); } void cleanupEnvironment() { environment.pop(BeanEditContext.class); environment.pop(BeanValidationContext.class); - // Restore the original BeanValidationContext as it might still be useful to the enclosing - // form - if (originalBeanValidationContext != null) - { - environment.push(BeanValidationContext.class, originalBeanValidationContext); - originalBeanValidationContext = null; - } } // For testing http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/349ef622/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java new file mode 100644 index 0000000..cea6295 --- /dev/null +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java @@ -0,0 +1,26 @@ +package org.apache.tapestry5.internal; + +import org.apache.tapestry5.services.BeanEditContext; + +import java.lang.annotation.Annotation; + +public class BeanEditContextImpl implements BeanEditContext +{ + private Class<?> beanClass; + + public BeanEditContextImpl(Class<?> beanClass) + { + this.beanClass = beanClass; + } + + public Class<?> getBeanClass() + { + return beanClass; + } + + public <T extends Annotation> T getAnnotation(Class<T> type) + { + return beanClass.getAnnotation(type); + } + +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/349ef622/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java index 745d6c3..af3ba5f 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java @@ -59,6 +59,7 @@ public class BeanEditorTest extends TapestryTestCase train_getOverrideMessages(overrides, messages); expect(model.newInstance()).andReturn(data); + expect(model.getBeanType()).andReturn(RegistrationData.class); replay(); EasyMock.replay(env);
