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.
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);
--- /dev/null
+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());
+ }
+
+}