2015-07-21 46 views
1

我怎样才能让FieldGroup/BeanFieldGroup绑定项目的集合?如何使用Vaadin(FieldGroup)绑定绑定一组/复杂类型的集合?

想象一下,有一本书,其中一套章节是复杂的类型。

public class Book { 
    private String title; 
    private Set<Chapter> chapters; 
} 

public class Chapter { 
    private String Text; 
    private int number; 
} 

然后,对于Vaadin布局,它们被绑定到例如一个VerticalLayout(例如)。我怎样才能得到绑定的“章节”的强类型集合/集合?

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(); 
} 

该绑定本身工作正常,但只适用于顶级“书”。

Book dto = ... // Comes populated with chapters etc. 

    BookLayout layout = new BookLayout(); 
    BeanFieldGroup<Book> binder = new BeanFieldGroup<>(Book.class); 
    binder.setItemDataSource(dto); 
    binder.bindMemberFields(layout); 

如何绑定一组复杂类型?我只找到一个单一(复杂类型)字段的例子。

+0

你能给我们提供更多关于你的问题的信息,为什么你需要绑定set Set的章节?你必须对这个对象做什么操作? – Skizzo

+0

我正在尝试创建一个类似于网络研讨会示例的可编辑表单,该示例在我的示例中具有一组复杂类型,而不仅仅是示例中的地址(例如地址集)中的单个值。 https://www.youtube.com/watch?v=aq_OXCVqvFI – lko

回答

4

您可以撰写自己的领域你是如何想处理这在UI的CustomField

某个域的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>>

+1

我也使用CustomField来处理类似的情况。现在我的问题是我有一个CustomField >,但我不知道如何实现AbstractField.getType()方法。函数标题看起来像这样:public Class <?扩展集合<**Entity**>> getType()和我的返回是(Class <?extends Set <**Entity**>>)Set.class;所以我可以使用这个组件,但是如果我想在Maven中构建我的项目,我会得到一个编译错误“incompatible types:”java.lang.Class 无法转换为java.lang.Class <?扩展为java.util.Set <**Entity**>>”我怎么解决这个 – shinchillahh

+0

你还记得你是怎么解决它 – enkara

+0

好吧,我想我找到了:???类clazz中= Set.class;返程(类<扩展设置 >)clazz中; – enkara