diff options
-rw-r--r-- | server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java | 14 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/tests/server/component/fieldgroup/BeanFieldGroupTest.java | 41 |
2 files changed, 53 insertions, 2 deletions
diff --git a/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java b/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java index 7e44c26c9e..b0d03af8d6 100644 --- a/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java +++ b/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java @@ -110,8 +110,7 @@ public class BeanFieldGroup<T> extends FieldGroup { return (BeanItem<T>) super.getItemDataSource(); } - @Override - public void bind(Field field, Object propertyId) { + private void ensureNestedPropertyAdded(Object propertyId) { if (getItemDataSource() != null) { // The data source is set so the property must be found in the item. // If it is not we try to add it. @@ -123,11 +122,22 @@ public class BeanFieldGroup<T> extends FieldGroup { getItemDataSource().addNestedProperty((String) propertyId); } } + } + @Override + public void bind(Field field, Object propertyId) { + ensureNestedPropertyAdded(propertyId); super.bind(field, propertyId); } @Override + public Field<?> buildAndBind(String caption, Object propertyId) + throws BindException { + ensureNestedPropertyAdded(propertyId); + return super.buildAndBind(caption, propertyId); + } + + @Override protected void configureField(Field<?> field) { super.configureField(field); // Add Bean validators if there are annotations diff --git a/server/tests/src/com/vaadin/tests/server/component/fieldgroup/BeanFieldGroupTest.java b/server/tests/src/com/vaadin/tests/server/component/fieldgroup/BeanFieldGroupTest.java new file mode 100644 index 0000000000..68c1133dc0 --- /dev/null +++ b/server/tests/src/com/vaadin/tests/server/component/fieldgroup/BeanFieldGroupTest.java @@ -0,0 +1,41 @@ +package com.vaadin.tests.server.component.fieldgroup; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import com.vaadin.data.fieldgroup.BeanFieldGroup; + +public class BeanFieldGroupTest { + + public static class MyBean { + + private MyNestedBean nestedBean = new MyNestedBean(); + + public MyNestedBean getNestedBean() { + return nestedBean; + } + } + + public static class MyNestedBean { + + private String hello = "Hello world"; + + public String getHello() { + return hello; + } + } + + @Test + public void buildAndBindNestedProperty() { + + MyBean bean = new MyBean(); + + BeanFieldGroup<MyBean> bfg = new BeanFieldGroup<MyBean>(MyBean.class); + bfg.setItemDataSource(bean); + + com.vaadin.ui.Field<?> helloField = bfg.buildAndBind("Hello string", + "nestedBean.hello"); + assertEquals(bean.nestedBean.hello, helloField.getValue().toString()); + } + +} |