如何让FieldGroup / BeanFieldGroup绑定项目集合?
想象一下,有一本书,有一套复杂类型的章节。
`row.names<-`(t(t(rbind(y,z))[,(x!='Yes')+1L]),x)
然后,对于Vaadin布局,他们将被绑定到例如一个VerticalLayout(例如)。如何才能将强类型的“章节”集合/集合绑定?
public class Book {
private String title;
private Set<Chapter> chapters;
}
public class Chapter {
private String Text;
private int number;
}
绑定本身工作正常但仅适用于顶级“Book”。
public class BookLayout extends VerticalLayout {
private TextField title = new TextField();
// ?? chapters
}
public class ChapterLayout extends VerticalLayout {
private TextField text = new TextField();
private TextField number = new TextField();
}
如何绑定一组复杂类型?我只找到了一个单一(复杂类型)字段的例子。
答案 0 :(得分:4)
您可以使用CustomField
撰写自己的字段,以便在UI中处理此问题:
一个字段,其UI内容可以由用户构建,从而能够创建例如通过组合Vaadin组件来形成字段。可以定制视觉呈现和现场逻辑。子类必须实现
AbstractField.getType()
和initContent()
。大多数自定义字段可以简单地组成一个用户界面,在必要时调用方法AbstractField.setInternalValue(Object)
和AbstractField.getInternalValue()
。也可以覆盖AbstractField.validate()
,AbstractField.setInternalValue(Object)
,AbstractField.commit()
,AbstractField.setPropertyDataSource(Property)
,AbstractField.isEmpty()
以及该字段的其他逻辑。
然后,您必须处理为那里的每个集合项设置章节布局的绑定(例如,将一个放在容器中,绑定它),添加一些添加/删除功能。基本上,由您决定如何实施CustomField<Set<Chapter>>