From 860876d311fdc42174590ed816b0b09f243362e6 Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Thu, 28 Feb 2013 12:07:35 +0200 Subject: [PATCH] Fixed BindException when binding nested properties with BeanFieldGroup.buildAndBind() #11009 Change-Id: I9bf646b7d8b767c78506a62185ce5dca9dcae7ad --- .../data/fieldgroup/BeanFieldGroup.java | 14 ++++++- .../fieldgroup/BeanFieldGroupTest.java | 41 +++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 server/tests/src/com/vaadin/tests/server/component/fieldgroup/BeanFieldGroupTest.java 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 extends FieldGroup { return (BeanItem) 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,10 +122,21 @@ public class BeanFieldGroup 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); 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 bfg = new BeanFieldGroup(MyBean.class); + bfg.setItemDataSource(bean); + + com.vaadin.ui.Field helloField = bfg.buildAndBind("Hello string", + "nestedBean.hello"); + assertEquals(bean.nestedBean.hello, helloField.getValue().toString()); + } + +} -- 2.39.5