我一直在这里和Vaadin论坛上搜索几个小时,但我似乎在这里有一个独特的问题。
为了能够轻松地说明,我简化了我的问题。 所以我有一个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";
}
}
所以现在我想在BeanFieldGroup的帮助下将Bean实例绑定到两个TextField:
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");
但是没有改变异常。那么有人知道是什么原因造成的吗?
提前多多感谢!
答案 0 :(得分:1)
我找到了,所以如果其他人有同样的问题:
解决方案是将@Valid注释添加到其中包含嵌套字段的字段中。
所以在我的例子中:
public class Bean {
private String name;
@Valid
private NestedBean nestedBean;
...
答案 1 :(得分: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);