首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有搜索功能的TreeModelAdapter

具有搜索功能的TreeModelAdapter
EN

Stack Overflow用户
提问于 2017-08-22 08:40:03
回答 1查看 58关注 0票数 1

我目前正在使用Tapestry 5.3,并使用Tree组件显示帐户列表的层次结构,其中包含4个级别。但现在,在这个场景中,我正在与搜索功能做斗争:

代码语言:javascript
运行
复制
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,树应该显示如下

代码语言:javascript
运行
复制
Level 1-1
|_ _ _ Level 2-2
       |_ _ _ Level 3-2
              |_ _ _ Level 4-1

谁能帮我一下这个逻辑的东西吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-31 07:17:05

终于,我想明白了。

我创建了一个新的类AccountTreeModelAdapter,它实现了TreeModelAdapter。您可以重写getChildren方法并将搜索逻辑放在那里。对我来说,它在这个流程中起作用:

  • setSearchedAccounts(List<Account> searchedAccounts)中添加AccountTreeModelAdapter方法
  • 从主类中设置它的值
  • getChildren方法中,使用Iterator迭代整个列表(所有帐户),并逐个与searchedAccounts列表中每个帐户的代码进行比较(在Java8中使用searchedAccounts.stream().filter() )。

瞧,现在这棵树只显示你想要的帐户。但是,如何显示家长呢?在此之前,树不会一次又一次地显示父树、父树和父树,直到到达根为止。

为此,我为数据库中的帐户实体创建了一个新列。那就是accountPath。因此,每当用户创建一个帐户时,这个accountPath就会像这样工作:

代码语言:javascript
运行
复制
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列表即可。

就这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45812820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档