您的位置:首页 > 产品设计 > UI/UE

动态树形菜单的实现

2016-05-27 16:31 465 查看
树形菜单的动态实现

用数据库的表[menu]事先存储好菜单的信息,然后将菜单信息从数据库里取出来之后,

在JAVA里通过一个2重循环进行树形菜单Json数据的构建

前端采用EasyUI的tree来接受后端传过来的Json数据

1.数据库的表[menu]的创建(Mysql数据库)

CREATE TABLE `menu` (                                                          

          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号 ',                   

          `pid` bigint(20) DEFAULT NULL COMMENT '父节点编号 ',                    

          `url` varchar(200) DEFAULT NULL COMMENT 'URL ',                              

          `iconCls` varchar(50) DEFAULT NULL COMMENT '图标样式 ',                  

          `text` varchar(50) DEFAULT NULL COMMENT '菜单名 ',                        

          `code` varchar(20) DEFAULT NULL COMMENT '权限编号 ',                     

          `level` bigint(10) DEFAULT NULL COMMENT '菜单级别 ',                              

          PRIMARY KEY (`id`)                                                           

        ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8  

2.业务层实现

[MenuService]接口

/**

 * 菜单服务接口

 * @author fanlikuo

 *

 */

public interface MenuService {

    /**

     * 菜单一览取得

     * @return

     */

    public List<Menu> getMenuList();

    

    public List<Menu> createMenuTree(List<Menu> menuList);

}

[MenuServiceImp]类

/**

 * 菜单服务类

 * @author fanlikuo

 *

 */

public class MenuServiceImp implements MenuService {

    private MenuDao menuDao;

    

    /**

     * 菜单一览取得

     */

    public List<Menu> getMenuList() {

        return menuDao.getMenuList();

    }

    /**

     * @param menuDao the menuDao to set

     */

    public void setMenuDao(MenuDao menuDao) {

        this.menuDao = menuDao;

    }

   /**

     * 构建菜单树json ☆☆☆☆重要☆☆☆☆

     * @param menuList 数据库取得的菜单信息

     * @return 菜单树json

     */

     public List<Menu> createMenuTree(List<Menu> menuList) {

         List<Menu> nodeList = new ArrayList<Menu>();

         if(menuList == null) {

             return nodeList;

         }

         for (Menu menu1 : menuList) {

             boolean mark = false;

             for (Menu menu2 : menuList) {

                 if (menu1.getPid().equals(menu2.getId())) {

                        mark = true;

                        if (menu2.getChildren() == null) {

                            menu2.setChildren(new ArrayList<Menu>());

                        }

                        menu2.getChildren().add(menu1);

                        break;

                    }

             }

            

             if (!mark) {

                    nodeList.add(menu1);

                }

         }

         return nodeList;

     }

}

[MenuDao]接口

/**

 *

 * @author fanlikuo

 *

 */

public interface MenuDao {

    

    /**

     * 菜单一览取得

     * @return

     */

    public List<Menu> getMenuList();

    

}

[MenuDao]类

public class MenuDaoImp  extends BaseDaoImpl<DataSourceBean> implements MenuDao {

    /**

     * 菜单一览取得

     */

    public List<Menu> getMenuList() {

        Criteria proposal = this.getSession().createCriteria(Menu.class);

        proposal.addOrder(Order.asc("id"));

        return proposal.list();

    }

}

[Menu]类

import java.util.List;

/**

 * 菜单

 * @author fanlikuo

 *

 */

public class Menu {

    

    /** 编号 */

    private String id;

    /** 父节点编号 */

    private String pid;

    /** URL */

    private String url;

    /** 菜单名 */

    private String text;

    /** 图标样式 */

    private String iconCls;

    /** 子菜单 */

    private List<Menu> children;

    /** 权限编号 */

    private String code;

    /** 菜单级别 */

    private String level;

    

    /**

     * @return the id

     */

    public String getId() {

        return id;

    }

    /**

     * @param id the id to set

     */

    public void setId(String id) {

        this.id = id;

    }

    /**

     * @return the pid

     */

    public String getPid() {

        return pid;

    }

    /**

     * @param pid the pid to set

     */

    public void setPid(String pid) {

        this.pid = pid;

    }

    /**

     * @return the text

     */

    public String getText() {

        return text;

    }

    /**

     * @param text the text to set

     */

    public void setText(String text) {

        this.text = text;

    }

    /**

     * @return the iconCls

     */

    public String getIconCls() {

        return iconCls;

    }

    /**

     * @param iconCls the iconCls to set

     */

    public void setIconCls(String iconCls) {

        this.iconCls = iconCls;

    }

    /**

     * @return the children

     */

    public List<Menu> getChildren() {

        return children;

    }

    /**

     * @param children the children to set

     */

    public void setChildren(List<Menu> children) {

        this.children = children;

    }

    /**

     * @return the url

     */

    public String getUrl() {

        return url;

    }

    /**

     * @param url the url to set

     */

    public void setUrl(String url) {

        this.url = url;

    }

    /**

     * @return the code

     */

    public String getCode() {

        return code;

    }

    /**

     * @param code the code to set

     */

    public void setCode(String code) {

        this.code = code;

    }

    /**

     * @return the level

     */

    public String getLevel() {

        return level;

    }

    /**

     * @param level the level to set

     */

    public void setLevel(String level) {

        this.level = level;

    }

}

最终生成的JSON数据结构如下(2级菜单):

[

{"id":"1","text":"菜单1","level":"1",

"children":[

{"id":"11","text":"菜单11","level":"2","children":[],"pid":"1","code":"dbcx","iconCls":"zhangjie","url":"XXXXX.action"},

{"id":"12","text":"菜单12","level":"2","children":[],"pid":"1","code":"xzst","iconCls":"zhangjie","url":"XXXXX.action"},

{"id":"13","text":"菜单13","level":"2","children":[],"pid":"1","code":"stgl","iconCls":"guilei","url":"XXXXX.jsp"},

{"id":"14","text":"菜单14","level":"2","children":[],"pid":"1","code":"sjygl","iconCls":"guilei","url":"XXXXX.jsp"},

{"id":"15","text":"菜单15","level":"2","children":[],"pid":"1","code":"sjycs","iconCls":"guilei","url":"XXXXX.jsp"}],

"pid":"-1","code":"sjcx","iconCls":"database-oper","url":""},

{"id":"2","text":"菜单2","level":"1",

"children":[

{"id":"21","text":"菜单21","level":"2","children":[],"pid":"2","code":"yhgl","iconCls":"zixun","url":XXXXX.jsp"},

{"id":"22","text":"菜单22","level":"2","children":[],"pid":"2","code":"jsgl","iconCls":"user-fun","url":"XXXXX.jsp"},

{"id":"23","text":"菜单23","level":"2","children":[],"pid":"2","code":"qxgl","iconCls":"org","url":"XXXXX.jsp"},

{"id":"24","text":"菜单24","level":"2","children":[],"pid":"2","code":"sjzd","iconCls":"sys-dictionary","url":"XXXXX.jsp"}],

"pid":"-1","code":"xtgl","iconCls":"sys-conf","url":""}]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息