summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java14
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/fieldgroup/BeanFieldGroupTest.java41
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());
+ }
+
+}