2016-11-03 93 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