我目前正在使用Tapestry 5.3,并使用Tree组件显示帐户列表的层次结构,其中包含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
谁能帮我一下这个逻辑的东西吗?谢谢。
发布于 2017-08-31 07:17:05
终于,我想明白了。
我创建了一个新的类AccountTreeModelAdapter
,它实现了TreeModelAdapter。您可以重写getChildren
方法并将搜索逻辑放在那里。对我来说,它在这个流程中起作用:
setSearchedAccounts(List<Account> searchedAccounts)
中添加AccountTreeModelAdapter
方法getChildren
方法中,使用Iterator
迭代整个列表(所有帐户),并逐个与searchedAccounts
列表中每个帐户的代码进行比较(在Java8中使用searchedAccounts.stream().filter()
)。瞧,现在这棵树只显示你想要的帐户。但是,如何显示家长呢?在此之前,树不会一次又一次地显示父树、父树和父树,直到到达根为止。
为此,我为数据库中的帐户实体创建了一个新列。那就是accountPath
。因此,每当用户创建一个帐户时,这个accountPath
就会像这样工作:
Account "ABC" (ID: 1)
|_ _ _ "XYZ" (ID: 2)
|_ _ _ "OPQ" (ID: 3)
|_ _ _ "STU" (ID: 4)
帐户"ABC“将没有路径(因为它是根)。帐户"XYZ“将有路径-1-帐户"OPQ”将有路径-1-2-帐户"STU“将有路径-1-2-3-
要获取每个家长的ID,请使用string.split("-")
因此,如果希望树显示父表,只需将父帐户添加到searchedAccounts
列表即可。
就这样。
https://stackoverflow.com/questions/45812820
复制相似问题