前一阵做的OA项目,有一个是组织架构的树,因为是分开做的,我做的是Controller和页面,其他组做的Service和Dao,因为之前一直没有商量页面用什么框架做比较好,导致,Dao层取出来的数据都不是Easyui Tree所能识别的,其实后台返回的也是树形的结构,但是他们返回的是name,,而不是Easyui Tree所能识别的text,他们返回的是****,,而不是Easyui Tree所能识别的children,因为别人已经做好了,所以也不方便让别人重新去定义格式,所以我这边只能通过转VO,把Service返回的对象重新进行封装,使之支持Easyui ,话不多说,直接上代码。

这段是VO代码;其中主要的就是ID,text,children,要转的就是这三个

  1. public class OrganizationVo implements Serializable{
  2.  
  3. private Integer id;
  4. private Integer pid;
  5. private Integer teamId;
  6. private String text;
  7. private String state;
  8. private String leader;
  9. private Integer sort;
  10. private List<OrganizationVo> children;
  11.  
  12. public OrganizationVo(){}
  13.  
  14. public OrganizationVo(Integer id,Integer pid, Integer teamId,String leader,Integer sort,String text,String state, List<OrganizationVo> children) {
  15. this.id = id;
  16. this.pid = pid;
  17. this.teamId = teamId;
  18. this.text = text;
  19. this.sort = sort;
  20. this.leader = leader;
  21. this.state = state;
  22. this.children = children;
  23. }
  24.  
  25. public Integer getId() {
  26. return id;
  27. }
  28.  
  29. public void setId(Integer id) {
  30. this.id = id;
  31. }
  32.  
  33. public Integer getTeamId() {
  34. return teamId;
  35. }
  36.  
  37. public void setTeamId(Integer teamId) {
  38. this.teamId = teamId;
  39. }
  40.  
  41. public String getText() {
  42. return text;
  43. }
  44.  
  45. public void setText(String text) {
  46. this.text = text;
  47. }
  48.  
  49. public String getLeader() {
  50. return leader;
  51. }
  52.  
  53. public void setLeader(String leader) {
  54. this.leader = leader;
  55. }
  56.  
  57. public Integer getSort() {
  58. return sort;
  59. }
  60.  
  61. public void setSort(Integer sort) {
  62. this.sort = sort;
  63. }
  64.  
  65. public String getState() {
  66. return state;
  67. }
  68.  
  69. public void setState(String state) {
  70. this.state = state;
  71. }
  72.  
  73. public List<OrganizationVo> getChildren() {
  74. return children;
  75. }
  76.  
  77. public void setChildren(List<OrganizationVo> children) {
  78. this.children = children;
  79. }
  80.  
  81. public Integer getPid() {
  82. return pid;
  83. }
  84.  
  85. public void setPid(Integer pid) {
  86. this.pid = pid;
  87. }
  88. }

这个是转换的工具类(只要组织,不带成员)

  1. public class TreeNoteUtil {
  2.  
  3. /**
  4. * 获取父节点菜单
  5. * @param treesList 所有树菜单集合
  6. * @return
  7. */
  8. public final static List<OrganizationVo> getFatherNode(List<TeamOrganizational> treesList){
  9. List<OrganizationVo> newTrees = new ArrayList<OrganizationVo>();
  10.  
  11. for (TeamOrganizational teamOrganizational : treesList) {
  12. if (teamOrganizational.getFatherId()==null) {//如果pId为空,则该节点为父节点
  13. //递归获取父节点下的子节点
  14. OrganizationVo newTree = new OrganizationVo();
  15. newTree.setId(teamOrganizational.getId());
  16. newTree.setText(teamOrganizational.getName());
  17. newTree.setTeamId(teamOrganizational.getTeamId());
  18.  
  19. List<TeamOrganizational> treesLists = teamOrganizational.getSonTeamOrganizationals();
  20. newTree.setChildren(getChildrenNode(teamOrganizational.getId(), treesLists));
  21. newTrees.add(newTree);
  22. }
  23. }
  24. return newTrees;
  25. }
  26.  
  27. /**
  28. * 递归获取子节点下的子节点
  29. * @param pId 父节点的ID
  30. * @param treesLists 所有菜单树集合
  31. * @return
  32. */
  33. private final static List<OrganizationVo> getChildrenNode(Integer pId, List<TeamOrganizational> treesLists){
  34. List<OrganizationVo> newTrees = new ArrayList<OrganizationVo>();
  35.  
  36. for (TeamOrganizational mt : treesLists) {
  37. if (mt.getFatherId() != null ) {
  38. if (mt.getFatherId() == pId) {
  39. OrganizationVo newTree = new OrganizationVo();
  40. //递归获取子节点下的子节点,即设置树控件中的children
  41. newTree.setChildren(getChildrenNode(mt.getId(), mt.getSonTeamOrganizationals()));
  42. //设置树控件attributes属性的数据
  43. newTree.setId(mt.getId());
  44. newTree.setText(mt.getName());
  45. newTree.setPid(mt.getFatherId());
  46. newTree.setTeamId(mt.getTeamId());
  47. newTree.setSort(mt.getSort());
  48. newTree.setLeader(mt.getLeader());
  49. newTrees.add(newTree);
  50. }
  51. }
  52. }
  53. return newTrees;
  54. }
  55.  
  56. }

这个是转换的工具类(带组织,带成员)

  1. public class TreeNoteUtil2 {
  2.  
  3. /**
  4. * 获取父节点菜单
  5. * @param treesList 所有树菜单集合
  6. * @return
  7. */
  8. public final static List<OrganizationVo> getFatherNode(List<TeamOrganizational> treesList){
  9. List<OrganizationVo> newTrees = new ArrayList<OrganizationVo>();
  10.  
  11. for (TeamOrganizational teamOrganizational : treesList) {
  12.  
  13. if (teamOrganizational.getFatherId()==null) {//如果pId为空,则该节点为父节点
  14. //递归获取父节点下的子节点
  15. OrganizationVo newTree = new OrganizationVo();
  16. newTree.setId(teamOrganizational.getId());
  17. newTree.setText(teamOrganizational.getName());
  18. newTree.setTeamId(teamOrganizational.getTeamId());
  19.  
  20. List<TeamOrganizational> treesLists = teamOrganizational.getSonTeamOrganizationals();
  21. List<OaUser> treesUserLists = teamOrganizational.getOaUsers();
  22. newTree.setChildren(getChildrenNode(teamOrganizational.getId(), treesLists,treesUserLists));
  23. newTrees.add(newTree);
  24. }
  25. }
  26.  
  27. return newTrees;
  28. }
  29.  
  30. /**
  31. * 递归获取子节点下的子节点
  32. * @param pId 父节点的ID
  33. * @param treesLists 所有菜单树集合
  34. * @return
  35. */
  36. private final static List<OrganizationVo> getChildrenNode(Integer pId, List<TeamOrganizational> treesLists,List<OaUser> treesUserLists) {
  37. List<OrganizationVo> newTrees = new ArrayList<OrganizationVo>();
  38.  
  39. for (TeamOrganizational mt : treesLists) {
  40. if (mt.getFatherId() != null) {
  41.  
  42. if (mt.getFatherId() == pId) {
  43. OrganizationVo newTree = new OrganizationVo();
  44. //递归获取子节点下的子节点,即设置树控件中的children
  45. newTree.setChildren(getChildrenNode(mt.getId(), mt.getSonTeamOrganizationals(),treesUserLists));
  46. //设置树控件attributes属性的数据
  47. newTree.setId(mt.getId());
  48. newTree.setText(mt.getName());
  49. newTree.setPid(mt.getFatherId());
  50. newTree.setTeamId(mt.getTeamId());
  51. newTree.setSort(mt.getSort());
  52. newTree.setLeader(mt.getLeader());
  53. if(mt.getOaUsers().size()>0){
  54. newTree.setChildren(getOaUsers(mt.getOaUsers()));
  55. }
  56. newTrees.add(newTree);
  57. }
  58. }
  59. }
  60. if(treesUserLists.size()>0){
  61. for (OaUser oaUser:treesUserLists){
  62. OrganizationVo newTree = new OrganizationVo();
  63. newTree.setId(oaUser.getId());
  64. newTree.setText(oaUser.getRealname());
  65. newTrees.add(newTree);
  66. }
  67. }
  68.  
  69. return newTrees;
  70. }
  71.  
  72. public static List<OrganizationVo> getOaUsers(List<OaUser> oaUsers){
  73. List<OrganizationVo> newTrees = new ArrayList<OrganizationVo>();
  74. if (oaUsers.size()>0){
  75. for (OaUser oaUser:oaUsers){
  76. OrganizationVo newTree = new OrganizationVo();
  77. newTree.setId(oaUser.getId());
  78. newTree.setText(oaUser.getRealname());
  79. newTrees.add(newTree);
  80. }
  81. }else{
  82.  
  83. }
  84. return newTrees;
  85. }
  86.  
  87. }

代码就这么多,主要是运用了递归的思想,因为在你不知道有多少层级的情况下,还是用递归比较方便,虽然循环比递归的速度快,占用内存小,但递归还是有其优势的;

同时,仔细看那两个工具类,第二个工具类比第一个工具类多了添加员工的操作,但是这里就不会使用递归了,因为员工下面不会再有员工了,为什么我会强调这个,因为我先写的是第一个工具类,总想着如何递归,写第二个的时候,人员总是重复添加,好久都找不到原因,后来才忽然想到,员工下面是没有员工的,于是恍然大悟。。。。

Jquery EasyUI Tree树形结构的Java实现(实体转换VO)的更多相关文章

  1. Jquery easyui tree的使用

    这个ui用的一切都是json数据.树也是如此! 后台需要返回与格式匹配的json数据才能正确加载树. 页面定义一个ui: <ul id="messageInfoAddTree" ...

  2. 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件

    看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...

  3. Jquery easyui Tree的简单使用

    Jquery easyui Tree的简单使用 Jquery easyui 是jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻 ...

  4. EasyUI之树形结构tree

    转自:https://blog.csdn.net/ya_1249463314/article/details/70305730 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  5. salesforce 零基础学习(七十)使用jquery table实现树形结构模式

    项目中UI需要用到树形结构显示内容,后来尽管不需要做了,不过还是自己做着玩玩,mark一下,免得以后项目中用到. 实现树形结构在此使用的是jquery的dynatree.js.关于dynatree的使 ...

  6. jquery easyui tree dialog

    <script type="text/javascript" src="<%=request.getContextPath()%>/include/ja ...

  7. Jquery EasyUI Tree .net实例

    图片: 针对tree: 数据库: CREATE TABLE [dbo].[SystemModel]( [Id] [,) NOT NULL, [Name] [nvarchar]() NULL, [Fat ...

  8. Tree 树形结构

    一.树的基本概念 (1)树(Tree)的概念:树是一种递归定义的数据结构,是一种重要的非线性数据结构. 树可以是一棵空树,它没有任何的结点:也可以是一棵非空树,至少含有一个结点. (2)根(Root) ...

  9. Jquery easyui tree 一些常见操作

    Tree: easyui tree的异步加载实现很简单,easyui的中文API文档中有实例(http://api.btboys.com/easyui/)——创建异步树形菜单,就是在tree node ...

随机推荐

  1. laravel 环境配置

    一.composer 安装 1.确定为最新版本的PHP 2.进入Composer官网下载页面,在页面最下方Manual Download区域选择需要的版本下载. 3.将下载的composer.phar ...

  2. Python3.x:代理ip刷评分

    Python3.x:代理ip刷评分 声明:仅供为学习材料,不允许用作商业用途: 一,功能: 针对某网站对企业自动刷评分: 网站:https://best.zhaopin.com/ 二,步骤: 1,获取 ...

  3. 20145307陈俊达《信息安全系统设计基础》第5周学习总结PT1

    20145307陈俊达<信息安全系统设计基础>第5周学习总结 教材学习内容总结 X86寻址方式经历三代: DOS时代的平坦模式,不安全,原因是没有区分用户空间和内核空间 8086的分段模式 ...

  4. 20145335郝昊《java程序设计》第2次实验报告

    20145335郝昊<java程序设计>第2次实验报告 实验名称 Java面向程序设计,采用TDD的方式设计有关实现复数类Complex. 理解并掌握面向对象三要素:封装.继承.多态. 运 ...

  5. Jquery5 基础 DOM 和 CSS 操作

    学习要点: 1.DOM 简介 2.设置元素及内容 3.元素属性操作 4.元素样式操作 5.CSS 方法 DOM 是一种文档对象模型.方便开发者对HTML 结构元素内容进行展示和修改.在 JavaScr ...

  6. log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" object is not assignable to a "org.apache.log4j.Appender" variable.

    多个classloader加载log4j时需要设置当前Thread的classloader为你自己的classloader Thread.currentThread().setContextClass ...

  7. Extjs的form跨域提交文件时,无法获取返回结果

    form文件表单跨域提交时,无法获取远程服务器的返回结果,form提交代码如下: form.submit({ url:'http://{remoteUrl}/hgisserver/wrds/file' ...

  8. Matlab 日期频次统计

    一.孕妇建档月份频次统计 源数据样本,为某医院一段时间内的孕妇建档时间 2015-04-22 10:12:522014-11-21 17:16:472013-12-16 17:35:442013-12 ...

  9. Global.asax详解

    在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...

  10. 分享海量 iOS 及 Mac 开源项目和学习资料

    UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITable ...