fsafdsafadsfafdsfdsafdafa

          liushengit

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            0 隨筆 :: 3 文章 :: 4 評論 :: 0 Trackbacks
          網(wǎng)上大部分菜單樹,都是單獨用js代碼來實現(xiàn)的,這樣做的缺點是:用戶無法動態(tài)的設(shè)置菜單項,比如,超級管理員可能需要根據(jù)每個用戶的權(quán)限,賦予他們不同的系統(tǒng)功能,不同的功能對應(yīng)著不同數(shù)量的菜單項。
          對于此問題,本人在他人一個js菜單的基礎(chǔ)上,開發(fā)了一個動態(tài)的系統(tǒng)菜單結(jié)構(gòu)樹:利用java代碼創(chuàng)建樹對象,并可以無限級別地給他添加子節(jié)點,然后在頁面上生成js代碼來顯示樹菜單。
          在這兒寫一個簡單的Demo ,此例子共包含個文件,如下:
          1、Node.java  節(jié)點類。
          2、TreeBoot.java 樹的根類。
          3、treeBean.java 頁面中引入的javaBean,在此文件中實現(xiàn)菜單樹的構(gòu)建。
          3、test.jsp   測試頁面。
          下面提供各個文件的代碼:
          Node.java
          package com.syw.tree;
          import java.util.ArrayList;
          import java.util.List;


          public class Node{
              
          //此節(jié)點下的子節(jié)點list,可以無限制 地向下擴展子節(jié)點
              private List<Node> list;
              
          //節(jié)點連接地址
              private String url;
              
          //要顯示的文字
              private String showName;
              
          //指定要顯示的Iframe
              private String target;
              
          //name屬性
              private String name;
              
          //如果為checkBox,selected = true or false
              private boolean isSelected;
              
          //如果為checkBox,value屬性值
              private String value;
              
          //節(jié)點圖標,如果不給其賦值,有默認圖標
              private String img;
              
          //用于標識是checkBox(input = 1), 還是 link(input = 0)
              private int input = 0;
              
              
          //link構(gòu)造方法
              public Node(String url,String showName,String target,String img){
                  list 
          = new ArrayList();
                  
          this.url = url;
                  
          this.showName = showName;
                  
          this.target = target;
                  
          this.input = 0;
                  
          this.img = img;
              }
              
              
          //checkBox構(gòu)造方法
              public Node(String showName,String name,boolean isSelected,String value,String img){
                  list 
          = new ArrayList();
                  
          this.showName = showName;
                  
          this.name = name;
                  
          this.isSelected = isSelected;
                  
          this.value = value;
                  
          this.input = 1;
                  
          this.img = img;
              }
              
              
          //為樹添加節(jié)點
              public void add(Node node){
                  
          this.list.add(node);
              }
              
              
          //以下為所有屬性的set、get方法
              public List getList() {
                  
          return list;
              }

              
          public void setList(List list) {
                  
          this.list = list;
              }

              
          public String getUrl() {
                  
          return url;
              }

              
          public void setUrl(String url) {
                  
          this.url = url;
              }

              
          public String getTarget() {
                  
          return target;
              }

              
          public void setTarget(String target) {
                  
          this.target = target;
              }

              
          public String getShowName() {
                  
          return showName;
              }

              
          public void setShowName(String showName) {
                  
          this.showName = showName;
              }

              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }

              
          public boolean isSelected() {
                  
          return isSelected;
              }

              
          public void setSelected(boolean isSelected) {
                  
          this.isSelected = isSelected;
              }

              
          public String getValue() {
                  
          return value;
              }

              
          public void setValue(String value) {
                  
          this.value = value;
              }

              
          public int getInput() {
                  
          return input;
              }

              
          public void setInput(int input) {
                  
          this.input = input;
              }

              
          public String getImg() {
                  
          return img;
              }

              
          public void setImg(String img) {
                  
          this.img = img;
              }

          }

          TreeBoot.java
          package com.syw.tree;
          import java.util.ArrayList;
          import java.util.List;


          public class TreeRoot {
              
              
          //樹的標題
              private String title;
              
              
          //樹根節(jié)點的圖標
              private String titleImgPath;
              
              
          //合并成的js語句內(nèi)容
              private String treeContent;
              
              
          //樹的所有子節(jié)點
              private List<Node> list;
              
              
          //節(jié)點計數(shù)器
              private int nodeId = 0;
              
              
          public TreeRoot(String title){
                  list 
          = new ArrayList();
                  
          this.title  = title;
              }
              
              
          public void add(Node node){
                  
          this.list.add(node);
              }

              
          public void setTitle(String title) {
                  
          this.title = title;
              }

              
          public void setTitleImgPath(String titleImgPath) {
                  
          this.titleImgPath = titleImgPath;
              }

              
          public void setList(List<Node> list) {
                  
          this.list = list;
              }
              
          //用遞歸函數(shù)取得所有樹節(jié)點,并組合成js語句
              private void readList(List<Node> list,int parentId){
                  
          for(Node node:list){
                      
          this.nodeId++;
                      
          if(node.getInput() == 0){
                          
          this.treeContent += "d.add("+this.nodeId+","+parentId+",'"+node.getShowName()+"','"+node.getUrl()+"','','"+node.getTarget()+"','');";
                      }
          else{
                          
          this.treeContent += "d.add("+this.nodeId+","+parentId+",'"+node.getShowName()+"<input name=\""+node.getName()+"\" type=\"checkbox\" "+(node.isSelected()?"checked=\"checked\" ":"")+"\" value=\""+node.getValue()+"\" >','','','','');";
                      }
                      
          if(node.getList().size()>0){
                          readList(node.getList(),
          this.nodeId);
                      }
                  }
              }
              
              
          //創(chuàng)建樹,并返回js代碼
              public String buildTree() {
                  
          this.treeContent = "d.add(0,-1,'"+title+"');";
                  readList(list,
          0);
                  
          return this.treeContent;
              }
              
          }

          treeBean.java
          package com.syw.tree;
          import java.util.ArrayList;
          import java.util.List;


          public class treeBean {

              
          /**
               * 
          @param args
               
          */
              
          public static String tree() {
                  
                  Node log 
          = new Node("","我的A Link測試","","");
                  log.add(
          new Node("http://www.baidu.com","刪除日志","iframe",""));
                  log.add(
          new Node("http://www.baidu.com","添加日志","iframe",""));
                  log.add(
          new Node("http://www.baidu.com","修改日志","iframe",""));
                  
                  Node checkbox 
          = new Node("","我的checkBox測試","","");
                  
                  checkbox.add(
          new Node("信息1","ss",false,"value1",""));
                  checkbox.add(
          new Node("信息3","ss",false,"value3",""));
                  checkbox.add(
          new Node("信息2","ss",false,"value2",""));
                  checkbox.add(
          new Node("信息4","ss",false,"value4",""));
                  
                  TreeRoot blogTree 
          = new TreeRoot("blog管理");
                  blogTree.add(log);
                  blogTree.add(checkbox);
                  
                  
                  
          return blogTree.buildTree();

              }

          }

          test.jsp
          <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
          <%@ page import="com.syw.tree.treeBean"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
              
          <head>
                  
          <link rel="StyleSheet" href="dtree.css" type="text/css" />
                  
          <script type="text/javascript" src="dtree.js"></script>
              
          </head>
              
          <body>
                  
          <div style="display:none" id="tree"><%=treeBean.tree()%></div>
                  
          <script type="text/javascript">
                  
          <!--
                  d 
          = new dTree('d');
                  
          //從treeBean中獲取js代碼
                  var treecontent = document.getElementById("tree").innerHTML;
                  
          //執(zhí)行代碼
                  eval(treecontent);
                  document.write(d); 
                  
          //-->
              </script>
             
          </div>
              
          </body>
          </html>

          運行結(jié)果:
          posted on 2012-03-23 14:45 java web 閱讀(6302) 評論(4)  編輯  收藏

          評論

          # re: java實現(xiàn)的可以無限級別添加子節(jié)點的菜單樹[未登錄] 2014-05-20 16:20 ysy
          把js提供一下  回復(fù)  更多評論
            

          # re: java實現(xiàn)的可以無限級別添加子節(jié)點的菜單樹[未登錄] 2014-05-20 18:44 liu
          下載:http://destroydrop.com/javascripts/tree/dtree.zip  回復(fù)  更多評論
            

          # re: java實現(xiàn)的可以無限級別添加子節(jié)點的菜單樹 2015-06-19 14:45 ldy
          頂  回復(fù)  更多評論
            

          # re: java實現(xiàn)的可以無限級別添加子節(jié)點的菜單樹 2015-09-06 15:43 mengmeng
          沒有dtree.css這個文件運行不出效果啊  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 卢氏县| 恩平市| 常德市| 峡江县| 抚顺市| 崇明县| 绥中县| 垫江县| 磴口县| 封开县| 隆林| 南昌市| 会泽县| 砀山县| 光山县| 榆林市| 安平县| 仙游县| 荔浦县| 扶风县| 防城港市| 庄浪县| 沈阳市| 股票| 抚远县| 柳林县| 深水埗区| 宣化县| 民勤县| 宁德市| 琼中| 信宜市| 阿勒泰市| 清涧县| 临安市| 大埔县| 岢岚县| 洛阳市| 合山市| 青神县| 邯郸市|