2016-12-14 1 views
0

Я искал часы здесь и на форумах Vaadin, но у меня, похоже, есть уникальная проблема.Vaadin BeanFieldGroup - «Свойство не каскадировано» при связывании вложенного свойства

Я упростил свою проблему, чтобы ее легко было проиллюстрировать. Так у меня есть класс Bean:

public class Bean { 
    private String name; 
    private NestedBean nestedBean; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public NestedBean getNestedBean() { 
     return nestedBean; 
    } 

    public void setNestedBean(NestedBean nestedBean) { 
     this.nestedBean = nestedBean; 
    } 

    Bean() { 
     this.name = "Bean"; 
     this.nestedBean = new NestedBean(); 
    } 
} 

и ее вложенное поле, класс NestedBean:

public class NestedBean { 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    NestedBean() { 
     this.name = "NestedBean"; 
    } 
} 

Так что теперь я хочу, чтобы связать экземпляр Bean два TextFields, с помощью BeanFieldGroup :

Bean bean = new Bean(); 

BeanFieldGroup<Bean> binder = new BeanFieldGroup<>(Bean.class); 
binder.setItemDataSource(bean); 

addComponent(binder.buildAndBind("Name", "name")); 
addComponent(binder.buildAndBind("Nested name", "nestedBean.name")); 

Это, однако, бросает это исключение:

java.lang.IllegalArgumentException: Property com.reygok.vaadin.main.Bean.nestedBean is not cascaded 

Caused by: org.apache.bval.jsr.UnknownPropertyException: Property com.reygok.vaadin.main.Bean.nestedBean is not cascaded 

Я пробовал различные решения, как:

Создание TextFields первой, а затем с помощью

binder.bind(textField, "nestedBean.name"); 

Делать это первая:

binder.getItemDataSource().addNestedProperty("nestedBean.name"); 

Но ничего не изменилось, за исключением. Так кто-то знает, что вызывает это?

Большое спасибо!

ответ

1

боба данных я нашел его, так что если у других есть такая же проблема:

Решение добавить @Valid аннотации к полям которые имеют вложенные поля внутри них.

Так в моем примере:

public class Bean { 
    private String name; 

    @Valid 
    private NestedBean nestedBean; 
... 
0

Я Recommand привязать элемент перед установкой источника

BeanFieldGroup<Bean> binder = new BeanFieldGroup<>(Bean.class); 

// first 
addComponent(binder.buildAndBind("Name", "name")); 
addComponent(binder.buildAndBind("Nested name", "nestedBean.name")); 
// then 
binder.setItemDataSource(bean); 
+0

Я попробовал, тоже, но это ничего не изменило. Почему это имеет значение? – Reygok3

Смежные вопросы