2016-11-03 50 views
0

我在我的TreeTable中创建父子链接时遇到问题。数据源Vaadin,TreeTable。 setParent

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

设置,如何设置对象的ID在这种数据源设置的?我没有明确的Id为TreeTable的元素。

这里是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; 
     }); 
    } 
} 

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

回答

0

这取决于您的ItemContainer。从vaadin共同BeanItemContainer使用项目作为项目ID其本身作为记录在这里https://vaadin.com/api/com/vaadin/data/util/BeanItemContainer.html

您正在使用vitrin的org.vaadin.viritin.ListContainer作用就像BeanItemContainer

所以,如果你愿意,你可以使用从你的列表中的项目为itemId/newParentId坚持你的ItemContainer实现。

或者你可以走很长的路,并通过迭代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)); 
+0

我没有清楚地理解,我怎么能在表 – zond

+1

设置ID从bean作为ID我为你添加一个例子。 setParent()接受Object,它是项目ID。项目ID可以是任何项目本身。因为你希望实现好的equals()方法,所以一切都应该正常工作。 – wolle