2016-11-03 3 views
0

TreeTable에서 부모 - 자식 링크를 만드는 데 문제가 있습니다. Vaadin, TreeTable. setParent

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

데이터 소스

설정은 어떻게 데이터 소스 설정의이 종류의 객체의 ID를 설정할 수 있습니까? TreeTable의 요소에 대해 명시 적 ID가 없습니다.

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 :

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 클래스 정의입니다 :

다음은 (내 응용 프로그램에서 코드가 아닙니다) 각 요소에 대한 아이디의의 "명확하게"정의를 볼 수 있습니다 example from vaadin입니다 내 질문에 분명히 희망을. 감사.

답변

0

귀하의 ItemContainer에 따라 다릅니다. 당신은 당신이 원하는 경우에 따라서는 itemId/newParentId로 목록에서 항목을 사용할 수있는 BeanItemContainer

처럼 행동 vitrin의 org.vaadin.viritin.ListContainer를 사용하고 여기에 https://vaadin.com/api/com/vaadin/data/util/BeanItemContainer.html

을 설명하는대로 만약 angel에서 일반적인 BeanItemContainer는 항목 ID 자체 항목을 사용합니다 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로 콩에서 ID를 설정하는 방법은 당신을 위해 예를 추가했습니다. setParent()는 항목 ID 인 Object를 허용합니다. 항목 ID는 항목 자체와 유사 할 수 있습니다. 잘하면 equals() 메소드를 구현했기 때문에 모든 것이 잘 동작해야한다. – wolle