2016-12-14 84 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