2016-11-03 2 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クラスの定義です:

は、ここでは、(私のアプリからのコードではありません)各要素のidのの "明確に" の定義を参照することができexample from vaadin、あります私の質問がはっきりすることを願ってありがとう。

答えて

0

あなたのItemContainerによって異なります。あなたは、あなたがしたいのであれば、あなたがitemId/newParentIdとしてあなたのリストからのアイテムを使用することができBeanItemContainer

ような演技vitrinのorg.vaadin.viritin.ListContainerを使用している、ここでhttps://vaadin.com/api/com/vaadin/data/util/BeanItemContainer.html

を文書としてvaadinから共通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