具有搜索功能的TreeModelAdapter

时间:2017-08-22 08:40:04

标签: java tapestry

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

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

有人可以帮我这个逻辑吗?感谢。

1 个答案:

答案 0 :(得分:0)

最后,我已经弄清楚了。

我创建了一个新类AccountTreeModelAdapter,它是实现TreeModelAdapter。您可以覆盖getChildren方法并将搜索逻辑放在那里。对我来说,它适用于这个流程:

  • setSearchedAccounts(List<Account> searchedAccounts)
  • 中添加AccountTreeModelAdapter方法
  • 从主要课程
  • 中设置它的值
  • getChildren方法中,使用Iterator来迭代整个列表(所有帐户),并逐一与searchedAccounts列表中的每个帐户代码进行比较(使用{{ Java 8)中的1}}。

Voila,现在树只会显示您想要的帐户。 但是,如何显示父母?在此之前,树不会一次又一次地显示父母和父母的父母以及父母的父母,直到您到达ROOT。

为此,我在数据库中为我的Account实体创建了一个新列。这是searchedAccounts.stream().filter()。因此,每次用户创建帐户时,此accountPath都将按以下方式运行:

accountPath

帐户&#34; ABC&#34;将没有路径(因为它是一个ROOT)。 帐号&#34; XYZ&#34;将有路径-1- 帐号&#34; OPQ&#34;将有路径-1-2- 帐号&#34; STU&#34;将有路径-1-2-3 -

要获取每个父母的ID,请使用string.split(&#34; - &#34;)

因此,如果您希望树显示父级,您只需将父级帐户添加到Account "ABC" (ID: 1) |_ _ _ "XYZ" (ID: 2)     |_ _ _ "OPQ" (ID: 3)        |_ _ _ "STU" (ID: 4) 列表即可。

这就是全部。