我现在正在使用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
有人可以帮我这个逻辑吗?感谢。
答案 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)
列表即可。
这就是全部。