WICKET-5505 DefaultPropertyResolver does not respect JavaBean conventions
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/6cceff44 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/6cceff44 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/6cceff44 Branch: refs/heads/sandbox/component-queueing-2 Commit: 6cceff44098a0183f0c9f632af93b3205db4ac22 Parents: a69e7ed Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Tue Feb 18 10:42:42 2014 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Tue Feb 18 10:42:42 2014 +0200 ---------------------------------------------------------------------- .../validation/DefaultPropertyResolver.java | 20 +++++++++++++-- .../validation/DefaultPropertyResolverTest.java | 27 ++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/6cceff44/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java ---------------------------------------------------------------------- diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java index 91eb1a3..442bca2 100644 --- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java +++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java @@ -3,6 +3,7 @@ package org.apache.wicket.bean.validation; import java.lang.reflect.Field; import java.lang.reflect.Method; +import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.model.IModel; import org.apache.wicket.model.IPropertyReflectionAwareModel; @@ -50,11 +51,26 @@ public class DefaultPropertyResolver implements IPropertyResolver return new Property(field.getDeclaringClass(), field.getName()); } + String name; Method getter = delegate.getPropertyGetter(); if (getter != null) { - String name = getter.getName().substring(3, 4).toLowerCase() + - getter.getName().substring(4); + String methodName = getter.getName(); + if (methodName.startsWith("get")) + { + name = methodName.substring(3, 4).toLowerCase() + + methodName.substring(4); + } + else if (methodName.startsWith("is")) + { + name = methodName.substring(2, 3).toLowerCase() + + methodName.substring(3); + } + else + { + throw new WicketRuntimeException("Invalid name for a getter method: '" + + methodName + "'. It must start either with 'get' or 'is'."); + } return new Property(getter.getDeclaringClass(), name); } http://git-wip-us.apache.org/repos/asf/wicket/blob/6cceff44/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java ---------------------------------------------------------------------- diff --git a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java index fe4653f..07bbe65 100644 --- a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java +++ b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java @@ -53,6 +53,22 @@ public class DefaultPropertyResolverTest assertThat(property.getOwner().getName(), is(Bean1.class.getName())); } + /** + * https://issues.apache.org/jira/browse/WICKET-5505 + */ + @Test + public void booleanHasFieldAndGetter() + { + DefaultPropertyResolver resolver = new DefaultPropertyResolver(); + + TextField<?> component = new TextField<>("id", new PropertyModel<BooleanBean>(new BooleanBean(), + "foo")); + Property property = resolver.resolveProperty(component); + assertThat(property, not(nullValue())); + assertThat(property.getName(), is("foo")); + assertThat(property.getOwner().getName(), is(BooleanBean.class.getName())); + } + @Test public void hasOnlyField() { @@ -93,4 +109,15 @@ public class DefaultPropertyResolverTest } } + /** + * WICKET-5505 + */ + public static class BooleanBean + { + public boolean isFoo() + { + return false; + } + } + }
