2016-12-14 30 views
0

我一直在這裏和Vaadin論壇上搜索幾個小時,但我似乎在這裏有一個獨特的問題。Vaadin BeanFieldGroup - 「Property is not cascaded」當綁定嵌套屬性

我簡化了我的問題,可以很容易地說明問題。 所以我有一個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的實例綁定兩個的TextField,用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 

我嘗試了不同的解決方案,如:

首先創建的TextField,然後使用

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

這樣做第一:

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

但沒有什麼變化異常。那麼有人知道是什麼原因造成的?

非常感謝!

回答

1

之前綁定成員,我發現了它,所以如果別人有同樣的問題:

的解決方案是將@Valid註釋添加到田間地頭嵌套在它們內部的字段。

所以在我的例子:

public class Bean { 
    private String name; 

    @Valid 
    private NestedBean nestedBean; 
... 
0

我建議您設置bean數據源

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