2017-08-22 46 views
1

我目前正在使用Tapestry 5.3,并使用树组件来显示具有4个级别的帐户列表的层次结构。但现在我在这种情况下努力寻找搜索功能:具有搜索功能的TreeModelAdapter

Level 1-1 
|_ _ _ Level 2-1 
|_ _ _ Level 2-2 
    |_ _ _ Level 3-1 
     |_ _ _ Level 3-2 
       |  |_ _ _ Level 4-1 
     |  |_ _ _ Level 4-2 
     |_ _ _ Level 3-3 

例如。用户想搜索帐户级别4-1,树应该像这样显示

Level 1-1 
|_ _ _ Level 2-2 
      |_ _ _ Level 3-2 
            |_ _ _ Level 4-1 

有人可以帮我这个逻辑的东西?谢谢。

回答

0

最后,我明白了。

我创建了一个新类AccountTreeModelAdapter这是执行TreeModelAdapter。您可以覆盖getChildren方法并将搜索逻辑放在那里。对我来说,工作在这个流程:

  • 添加setSearchedAccounts(List<Account> searchedAccounts)方法AccountTreeModelAdapter
  • 设置它从你的主类
  • 值在getChildren方法,使用Iterator遍历你的整个列表(所有帐户),并比较一个通过searchedAccounts列表中的每个帐户的代码(使用Java 8中的searchedAccounts.stream().filter())。

瞧,现在这棵树只会显示你想要的账号。 但是,如何显示父项?在此之前,树会一次又一次地显示父代和父代的父代以及父代的父代,直到您到达ROOT。

为了达到这个目的,我在数据库中为我的Account实体创建了一个新列。这是accountPath。所以每次用户创建一个帐户,这accountPath会像这样:

Account "ABC" (ID: 1) 
    |_ _ _ "XYZ" (ID: 2) 
    |_ _ _ "OPQ" (ID: 3) 
           |_ _ _ "STU" (ID: 4) 

帐户“ABC”的意志没有路径(因为它是一个ROOT)。 帐户“XYZ”将具有路径-1- 帐户“OPQ”将一直路径-1-2- 帐户“STU”将具有路径-1-2-3-

为了让每一个家长的ID,使用string.split(“ - ”)

所以,如果你想树显示父,你可以简单地将父帐户添加到searchedAccounts列表。

就是这样。