EasyUi 菜单树形 列表显示

    $(function($) {
            $('#tg').treegrid({
             url:'<%=request.getContextPath()%>/sysMenu/list',
             rownumbers: false,
             treeField: 'name',
             checkbox:true,
        ascadeCheck:true,//结连显示 idField:
'id', emptyMsg:'无数据', columns:[[ {title:'id',field:'id',width:160,hidden:true}, {field:'action',title:'操作',formatter:formatAction,width:'15%'}, {title:'菜单名称',field:'name',width:'25%',align:'left'}, {title:'菜单路径',field:'url',width:'25%',align:'left'}, {title:'菜单排序值',field:'displayorder',width:'15%',align:'left'}, {title:'创建日期',field:'createdate',width:'25%',align:'left'}, {title:'修改日期',field:'modifydate',width:'25%',align:'left'} ]] }); }); function formatAction(val,row){ return '<a style="" href="#" οnclick="javascript:editMenu('+row.id+')"> 编辑</a>'; }
    @RequestMapping("/list")
    public void list(HttpServletRequest request,HttpServletResponse response){
            

        List<SysMenu> list = null;
        Map<String,Object> params = new HashMap<String,Object>();
        
        gtSysUser user = (gtSysUser)request.getSession().getAttribute("user");
            list = this.sysMenuService.list(params);
            SysMenu tempMenu = sysMenuService.selectByPrimaryKey(1);
            
            if(!list.contains(tempMenu))
            {
                list.add(0,tempMenu);
                
            }

        List menuList = new ArrayList<Map>();
        //根菜单
        HashMap<String,Object> menuRootMap = new HashMap<>();
        for(SysMenu menu : list){
                
                if(menu.getParentid() == null || menu.getParentid() == 0){
                    menuRootMap.put("id", menu.getId());
                    menuRootMap.put("name", menu.getName());
                    menuRootMap.put("url", menu.getUrl());
                    menuRootMap.put("icon", menu.getIcon());
                    menuRootMap.put("displayorder", menu.getDisplayorder());
                    menuRootMap.put("createdate", menu.getCreatedate());
                    menuRootMap.put("modifydate", menu.getModifydate());
                }
        };        
        ArrayList<Map<String,Object>> modalArray = new ArrayList<Map<String,Object>>();
          for(SysMenu menuParent : list){
            
            //二级模块
            if(menuParent.getParentid() == menuRootMap.get("id")){
                HashMap<String,Object> menuParentMap = new HashMap<String,Object>();
                ArrayList<Map<String,Object>> childrenList = new ArrayList<Map<String,Object>>() ;
                menuParentMap.put("id", menuParent.getId());
                menuParentMap.put("name", menuParent.getName());
                menuParentMap.put("url", menuParent.getUrl());
                menuParentMap.put("icon", menuParent.getIcon());
                menuParentMap.put("displayorder", menuParent.getDisplayorder());
                menuParentMap.put("createdate", menuParent.getCreatedate());
                menuParentMap.put("modifydate", menuParent.getModifydate());
                
                //菜单
                for(SysMenu menuChildren : list){
                    
                    if(menuChildren.getParentid().intValue() == menuParent.getId().intValue()){
                        HashMap<String,Object> menuChildrenMap = new HashMap<>();
                        menuChildrenMap.put("id", menuChildren.getId());
                        menuChildrenMap.put("name", menuChildren.getName());
                        menuChildrenMap.put("url", menuChildren.getUrl());
                        menuChildrenMap.put("icon", menuChildren.getIcon());
                        menuChildrenMap.put("displayorder", menuChildren.getDisplayorder());
                        menuChildrenMap.put("createdate", menuChildren.getCreatedate());
                        menuChildrenMap.put("modifydate", menuChildren.getModifydate());
                        childrenList.add(menuChildrenMap);
                        
                        ArrayList<Map<String,Object>> buttonChildrenList = new ArrayList<Map<String,Object>>();
                        //按钮
                        for(SysMenu menuButton : list){
                        
                            if(menuButton.getParentid().intValue() == menuChildren.getId().intValue()){
                                HashMap<String,Object> buttonChildrenMap = new HashMap<>();
                                buttonChildrenMap.put("id", menuButton.getId());
                                buttonChildrenMap.put("name", menuButton.getName());
                                buttonChildrenMap.put("url", menuButton.getUrl());
                                buttonChildrenMap.put("icon", menuButton.getIcon());
                                buttonChildrenMap.put("displayorder", menuButton.getDisplayorder());
                                buttonChildrenMap.put("createdate", menuButton.getCreatedate());
                                buttonChildrenMap.put("modifydate", menuButton.getModifydate());
                                buttonChildrenList.add(buttonChildrenMap);    
                            }    
                        }
                        menuChildrenMap.put("children", buttonChildrenList);
                    }
                }
                menuParentMap.put("children", childrenList);
                modalArray.add(menuParentMap);
            }
        }
        
        menuRootMap.put("children", modalArray);
        
        menuList.add(menuRootMap);
        
        //HashMap<String,Object> messageMap = new HashMap<String,Object>();
        //messageMap.put("rows", list);
        
        //this.out(response, messageMap);
        this.webOut(response, menuList);
        return;
    }

 

转载于:https://www.cnblogs.com/cuijinlong/p/7200268.html

首先,我们需要明确对称矩阵的特征值都是实数。因为对称矩阵的特征向量是正交的,所以对于任意一个向量x,都有: x^T * Ax = x^T * A^T * x 因为A是对称矩阵,所以A^T = A,于是上式可以改写为: x^T * Ax = x^T * A * x 我们考虑将A分解为A = S + B,其中S是A的对称部分,B是A的反对称部分。因为S是对称矩阵,所以S可以进行特征值分解: S = QΛQ^T 其中,Q是正交矩阵,Λ是对角矩阵,其对角线上的元素就是S的特征值。因为S是对称矩阵,所以其特征值都是实数。 我们将上式代入原式,得到: x^T * (S + B) * x = x^T * S * x + x^T * B * x 因为S是对称矩阵,所以x^T * S * x一定是实数。而x^T * B * x是纯虚数,因为B是反对称矩阵。 因此,我们可以得到: | x^T * Ax | = | x^T * (S + B) * x | <= | x^T * S * x | + | x^T * B * x | 因为| x^T * B * x | <= | x |^2 * ||B||,其中||B||表示B的范数。因此,我们可以将上式继续变形,得到: | x^T * Ax | <= | x^T * S * x | + | x |^2 * ||B|| 现在我们来分别计算|x^T * S * x|和||B||: |x^T * S * x| = |x^T * QΛQ^T * x| = |(Q^T * x)^T * Λ * (Q^T * x)| 因为Q是正交矩阵,所以Q^T * x的范数等于x的范数,而且(Q^T * x)^T * (Q^T * x) = x^T * Q * Q^T * x = x^T * x = ||x||^2。因此,我们可以得到: |x^T * S * x| = ||Q^T * x||^2 * ||Λ|| 其中,||Λ||表示Λ的最大特征值。因为S是对称矩阵,所以其特征值都是实数,因此||Λ||就是S的最大特征值。 接下来我们来计算||B||。因为B是反对称矩阵,所以它的元素满足b_ij = -b_ji。因此,B的范数可以表示为: ||B||^2 = sum_i=1^n sum_j=1^n b_ij^2 = 2 * sum_i<j b_ij^2 现在我们来将这些结果代入之前的不等式中,得到: | x^T * Ax | <= ||Q^T * x||^2 * ||Λ|| + ||x||^2 * ||B|| 我们要证明的是对称部分的特征值小于等于A的范数。因此,我们可以假设A的最大特征值为λ_max,对应的特征向量为v_max。我们取x = v_max,代入上式中,得到: | v_max^T * A * v_max | <= ||v_max||^2 * ||Λ|| + ||v_max||^2 * ||B|| 因为v_max是A的特征向量,所以有Av_max = λ_maxv_max。因此, | v_max^T * A * v_max | = λ_max * ||v_max||^2 将这个结果代入上式,得到: λ_max * ||v_max||^2 <= ||v_max||^2 * ||Λ|| + ||v_max||^2 * ||B|| 因为v_max不等于0,所以我们可以将||v_max||^2约掉,得到: λ_max <= ||Λ|| + ||B|| 因为Λ是S的特征值,而S是A的对称部分,所以S的特征值都小于等于A的特征值。因此,||Λ||就是A的对称部分的特征值的最大值。另外,我们已经证明了||B||^2 = 2 * sum_i<j b_ij^2,而b_ij是A的非对称部分的元素,因此||B||表示A的非对称部分的范数。因为A的范数等于其所有特征值的平方和的平方根,所以我们可以得到: ||A||^2 = sum_i=1^n λ_i^2 其中,λ_i表示A的第i个特征值。因此, ||A||^2 = sum_i=1^n λ_i^2 >= λ_max^2 将这个结果代入之前的不等式中,得到: λ_max <= ||Λ|| + ||B|| <= sqrt(sum_i=1^n λ_i^2) 因此,我们证明了对称部分的特征值小于等于A的范数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值