Vaadin,TreeTable。的setParent

时间:2016-11-03 13:31:52

标签: vaadin treetable

我在TreeTable中创建父子链接时遇到问题。

设置DataSource

table.setContainerDataSource(new TempPeopleContainer(((MyUI) UI.getCurrent()).peopleService.getItemList()));
table.setParent(1,0);

如何在这种DataSource设置中设置Object的id?我对TreeTable的元素没有明确的Id。

这是example from vaadin,您可以在其中看到每个元素的“明确”Id定义(代码不是来自我的应用):

 TreeTable ttable = new TreeTable("My TreeTable");
    ttable.addContainerProperty("Name", String.class, null);
    ttable.addContainerProperty("Number", Integer.class, null);
    ttable.setWidth("20em");

    // Create the tree nodes and set the hierarchy
    ttable.addItem(new Object[]{"Menu", null}, 0);
    ttable.addItem(new Object[]{"Beverages", null}, 1);
    ttable.setParent(1, 0);
    ttable.addItem(new Object[]{"Foods", null}, 2);
    ttable.setParent(2, 0);

这是我的TempPeopleContainer类定义:

private class TempPeopleContainer extends FilterableListContainer<People> {
    public TempPeopleContainer(final Collection<People> collection) {
        super(collection);
    }

    // This is only temporarily overridden until issues with
    // BeanComparator get resolved.
    @Override
    public void sort(final Object[] propertyId, final boolean[] ascending) {
        final boolean sortAscending = ascending[0];
        final Object sortContainerPropertyId = propertyId[0];
        Collections.sort(getBackingList(), (o1, o2) -> {
            int result = 0;
            if ("lastname".equals(sortContainerPropertyId)) {
                result = o1.getLastname().compareTo(o2.getLastname());
            }
            if (!sortAscending) {
                result *= -1;
            }
            return result;
        });
    }
}

我希望我的问题很明确。感谢。

1 个答案:

答案 0 :(得分:0)

这取决于你的ItemContainer。来自vaadin的常见BeanItemContainer使用该项作为项目ID本身,如此处所述https://vaadin.com/api/com/vaadin/data/util/BeanItemContainer.html

您正在使用像org.vaadin.viritin.ListContainer

一样的vitrin BeanItemContainer

如果您想坚持使用ItemContainer实现,那么您可以将列表中的项目用作itemId / newParentId

或者你可以通过迭代com.vaadin.data.Container.getItemIds()来获取项目ID,并手动检查此项目ID是否是您要使用的父ID。

编辑:

尝试这样的事情:

List myList = ((MyUI) UI.getCurrent()).peopleService.getItemList();
TempPeopleContainer container = new TempPeopleContainer(myList);
table.setContainerDataSource(container);
table.setParent(myList.get(1), myList.get(0));