2016-11-03 9 views
0

У меня возникла проблема с созданием ссылки parent-child в моей TreeTable.Vaadin, TreeTable. setParent

Настройка DataSource

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

Как я могу установить идентификатор объекта в такой обстановке DataSource? У меня нет явного идентификатора для элементов 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; 
     }); 
    } 
} 

I надеюсь, мой вопрос ясен. Благодарю.

ответ

0

Это зависит от вашего товара. Распространенное BeanItemContainer из Vaadin использует элемент в качестве самого элемента ид как описано здесь https://vaadin.com/api/com/vaadin/data/util/BeanItemContainer.html

Вы используете Vitrin-х org.vaadin.viritin.ListContainer действует как BeanItemContainer

Таким образом, вы можете использовать элементы из списка, как itemId/newParentId если вы хотите придерживаться ваших реализаций ItemContainer.

Или вы можете пройти длинный путь и получить идентификаторы элементов, итерации по com.vaadin.data.Container.getItemIds() и проверить вручную, если этот идентификатор элемента является родительским идентификатором, который вы хотите использовать.

редактировать:

попробовать что-то вроде этого:

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

Я никогда не ясно понял, как я могу установить идентификатор из Bean в качестве идентификатора в таблице – zond

+1

я добавил пример для вас. setParent() принимает объект, который является идентификатором элемента. Идентификаторы элементов могут быть похожими на элемент. Поскольку вы, надеюсь, реализовали хорошие методы equals(), все должно работать нормально. – wolle