【问题标题】:Vaadin, TreeTable. setParentVaadin,树表。设置父级
【发布时间】:2016-11-03 13:31:51
【问题描述】:

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

数据源设置

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

我希望我的问题很清楚。谢谢。

【问题讨论】:

    标签: vaadin treetable


    【解决方案1】:

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

    您正在使用 vitrin 的 org.vaadin.viritin.ListContainer,其作用类似于 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));
    

    【讨论】:

    • 我还没有很清楚,如何将 Bean 的 id 设置为 table 中的 id
    • 我为你添加了一个例子。 setParent() 接受 Object,即项目 ID。项目 ID 可以是项目本身之类的任何东西。因为您希望实现了良好的 equals() 方法,所以一切都应该正常工作。
    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2011-10-03
    • 2018-01-07
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多