具有搜索功能的 TreeModelAdapter
TreeModelAdapter with Search Functionality
我目前正在使用 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
有人可以帮我解决这个逻辑问题吗?谢谢
终于想通了
我创建了一个新的 class AccountTreeModelAdapter
,它是工具 TreeModelAdapter。您可以覆盖 getChildren
方法并将您的搜索逻辑放在那里。对我来说,它适用于这个流程:
- 在
AccountTreeModelAdapter
中添加setSearchedAccounts(List<Account> searchedAccounts)
方法
- 从您的主 class
中设置它的值
- 在
getChildren
方法中,使用Iterator
遍历整个列表(所有账户)并与searchedAccounts
列表中的每个账户代码一一比较(使用searchedAccounts.stream().filter()
在 Java 8).
瞧,现在树将只显示您想要的帐户。
但是,如何显示parent?直到此时,树不显示 parent 和 parent 的 parent 和 parent 的 parent 一次又一次,直到你到达 ROOT .
为此,我在数据库中为我的帐户实体创建了一个新列。即 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-
要获取每个 parent 的 ID,请使用 string.split("-")
因此,如果您希望树显示 parent,您只需将 parent 帐户添加到 searchedAccounts
列表即可。
就这些了。
我目前正在使用 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
有人可以帮我解决这个逻辑问题吗?谢谢
终于想通了
我创建了一个新的 class AccountTreeModelAdapter
,它是工具 TreeModelAdapter。您可以覆盖 getChildren
方法并将您的搜索逻辑放在那里。对我来说,它适用于这个流程:
- 在
AccountTreeModelAdapter
中添加 - 从您的主 class 中设置它的值
- 在
getChildren
方法中,使用Iterator
遍历整个列表(所有账户)并与searchedAccounts
列表中的每个账户代码一一比较(使用searchedAccounts.stream().filter()
在 Java 8).
setSearchedAccounts(List<Account> searchedAccounts)
方法
瞧,现在树将只显示您想要的帐户。 但是,如何显示parent?直到此时,树不显示 parent 和 parent 的 parent 和 parent 的 parent 一次又一次,直到你到达 ROOT .
为此,我在数据库中为我的帐户实体创建了一个新列。即 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-
要获取每个 parent 的 ID,请使用 string.split("-")
因此,如果您希望树显示 parent,您只需将 parent 帐户添加到 searchedAccounts
列表即可。
就这些了。