根据tree文件菜单的path,拼接文件夹路径
来源:互联网 发布:python 中位数 编辑:程序博客网 时间:2024/06/01 08:20
新添加一个的时候拼接十分简单;如果修改的时候呢,这样的情况就比较复杂了,很多情况可能都考虑不完全。
主要问题:修改一个节点的上级节点时,各个节点的资源路径修改幅度较大,比较容易疏漏。
比如:1、你将某一个节点的上级节点修改到一个节点下面,那么修改那个节点的子节点路径全部需要更改;
2、如果将某个节点的上级节点修改到该节点的子节点下呢,那就更麻烦了。。需要更新的节点就更多了。
效果图:
/** * 拼接保存每个文件夹的路径(filepath字段)【从下至上拼接】 * @param parents * @param filePath * @return */public String getPathName(TIndex parents,String filePath){if(parents!=null){filePath = parents.getName()+"/"+filePath;return getPathName(parents.getTIndex(), filePath);}return filePath;}
/** * 更新文件旅游资源文件夹管理 */@Overridepublic void updateFilePath(Index index) { TIndex in = indexDao.get(TIndex.class, index.getId()); BeanUtils.copyProperties(index, in); String pid = index.getPid(); String filePath = in.getName()+"/"; TIndex parents = null; Boolean flag = false; if(pid!=null&&!pid.equals("")&&!pid.endsWith(index.getId())){ parents = indexDao.get(TIndex.class, pid); //获取到父对象 TIndex flag = isChildren(in, parents); // 说明要将当前资源修改到当前资源的子/孙子资源下 in.setTIndex(parents); filePath = this.getPathName(parents,filePath);//if(parents!=null){in.setTIndex(parents);//}if(flag){ //判断是否将上级菜单选择在了自己原菜单的子菜单下面RecursionUpdateParentFilePath(parents);} }else{ in.setTIndex(null); // 前台没有选中上级资源,所以就置空 } in.setFilePath(filePath); Set<TIndex> set = null; if(!flag){ //没有选择在当前资源修改到当前资源的子/孙子资源下 set = in.getTIndexes(); if(set!=null&&set.size()>0){//判断是否有子菜单 this.HasChildren(in); } }else{//更改上级菜单的子菜单 if(parents.getTIndex()!=null){ //同级目录的资源也同时更改 parents = parents.getTIndex(); } set = parents.getTIndexes(); if(set!=null&&set.size()>0){ //判断是否有子菜单 this.HasChildren(parents); } }}/** * 递归更改上级菜单的filepath * @param parents(选中的上级菜单) * @return */public String RecursionUpdateParentFilePath(TIndex parents){String filePath = "";String path = this.getPathName(parents,filePath);parents.setFilePath(path);if(parents.getTIndex()!=null){ //代表还有上级菜单return RecursionUpdateParentFilePath(parents.getTIndex());}return null;}/** * 分层递归更改子菜单路径 * @param in * @return */public String HasChildren(TIndex in){Set<TIndex> children = in.getTIndexes();this.getPathNameDown(children,in);if(children!=null&&children.size()>0){for(TIndex t :children){ HasChildren(t);}}return null;}/** * 通过递归更改子菜单每个文件夹的路径(filepath字段)【从上至下拼接】 * @param children(更改对象子菜单) * @param in(更改对象) * @return */public String getPathNameDown(Set<TIndex> children,TIndex in){ String filePath = in.getFilePath(); if(children!=null&&children.size()>0){for(TIndex t :children){ filePath = in.getFilePath()+t.getName()+"/"; t.setFilePath(filePath);}}return filePath;}/** * 递归判断是否此次修改, 将自己的上级菜单修改到了自己的子菜单中了; * 如果是,那么将该上级菜单的 最顶级的上级菜单置空; * @param t * 当前节点 * @param pt * 要修改到的节点 */public Boolean isChildren(TIndex t,TIndex pt){if(pt!=null&&pt.getTIndex()!=null){ //代表至少是该菜单下的子二级菜单if(pt.getTIndex().getId().equalsIgnoreCase(t.getId())){pt.setTIndex(null);return true;}else{return isChildren(t,pt.getTIndex());}}return false;}
给你们看下我的TIndex的结构吧:
@Entity@Table(name = "t_index", catalog = "qx")public class TIndex implements java.io.Serializable {// Fieldsprivate String id;private TIndex TIndex;private String name;private String filePath;private String comment;private BigDecimal seq;private String iconCls;private Set<TIndex> TIndexes = new HashSet<TIndex>(0);}
- 根据tree文件菜单的path,拼接文件夹路径
- 为文件、文件夹添加复制路径的右键菜单
- 根据路径拼接文件名
- Tree-----根据给定的数字找路径(112. Path Sum)
- linux 根据文件路径自动创建文件夹
- 根据文件夹路径处理图片文件
- C#根据文件路径获取该文件夹路径、文件名、后缀名
- python中拼接路径os.path.join的坑
- Java 根据定路径删除文件和文件夹下的所有文件
- **Java 根据指定文件路径重命名文件且放入新的文件夹**
- 根据文件路径获得其所在文件夹,并删除该文件夹下后缀名为.tmp的所有文件
- Android 根据路径获取该目录下的所有的 "文件夹",或者文件 判断的演变
- $PATH 关于执行文件路径的路径
- Node.Js Path模块-文件或文件夹路径字符串操作
- 批处理根据文本文件中的文件路径,复制到指定文件夹
- 根据用户权限和角色拼接菜单
- Java 根据路径生成文件夹
- 关于执行文件路径的变量:$PATH
- 一个解析RTSP 的URL函数
- PAT (Advanced Level) Practise —— 1001. A+B Format (20)
- 这些年,我们的感悟
- VC调试中出现的一些内存值
- XML wsdl soap xslt xsl ide
- 根据tree文件菜单的path,拼接文件夹路径
- 小技巧
- spring获取bean 实例
- 总结:程序设计基础
- LINUX 环境变量总结
- ios-王云鹤 调用ios系统功能---------------打电话、发短信、发邮件
- Eclipse Tomcat插件的配置, 及 Tomcat 的配置
- 超炫的Button按钮展开弧形动画效果
- 数字图像白平衡学习笔记