1. 程式人生 > >jqgrid 樹形選單遞迴載入

jqgrid 樹形選單遞迴載入

/**
     * @author ty
     * @param list 空的list
     * @param sourcelist 有資料的list
     * @param parentId 父級Id
     * @param s 樹形等級從1開始
     */
    @JsonIgnore
    public  void sortList(List<Menu> sourcelist,List<Menu> list, String parentId,int s){
        // 預設等級是1
        // 遍歷集合
        for (int i=0; i<sourcelist.size(); i++){
            Menu off = sourcelist.get(i);
            if (parentId.equals(off.getParentId())){//如果傳進來的id與getid相同就說明這是第一級
                boolean bool = bool(off.getId(),sourcelist);
                off.setLeaf(bool); //設定是否有下一級可以載入。
                off.setExpanded(false);//設定是否預設開啟
                off.setLevel(s);//設定樹層級級別
                //樹ID,如果樹的等級不是1,其父ID不為null
                String str = null;
                if(s!=1){
                    str=off.getParentId();
                }
                off.setParent1(str);//設定父ID,第一級樹沒有父ID
                off.setLaoded(true);//設定是否一次載入
                list.add(off);//把資料新增到新的list裡
                if (!bool){
                    sortList(sourcelist, list,off.getId(),++s);//遞迴 載入下一級樹
                    s--;
                }
            }
        }
    }
    /**
     * 判斷是否有下級
     * 如果有就返回false
     * @param i 通常是getId
     * @param list 有資料的list
     * @return
     */
    public boolean bool (String id,List<Menu> list){
        boolean bool = true;
        for(Menu y : list){
            if(id.equals(y.getParentId())){
                bool = false;
            }
        }
        return bool;

    }

JSP程式碼

<script type="text/javascript">
        $(function(){
            DrawJqGridTable();
        })
        function DrawJqGridTable(){
            var ss=$("#xingming").val();
            var test="test";
            $("#table_list").jqGrid({
                 treeGrid: true,  
                treeGridModel: 'adjacency', //treeGrid模式,跟json元資料有關  
                ExpandColumn : 'name',//指定哪列(colModel中的name配置值)用於展開屬性表格
                ExpandColClick:true,
                 prmNames:{//自定義引數屬性
                           page:"jpageno",//頁碼的引數名稱
                           rows:"jpagesize",//行數的引數名稱
                           sort:"jpagesort",//排序列名的引數名稱
                           order:"jpageorder",//排序方式的引數名稱
                           search:"jsearch",//是否是搜尋請求的引數名稱
                           // nd:"jnd", //已經發送請求的次數的引數名稱
                           //id:"id", // 表示當在編輯資料模組中傳送資料時,使用的id的名稱
                           //oper:"oper", // operation引數名稱
                           //editoper:"edit", // 當在edit模式中提交資料時,操作的名稱
                           //addoper:"add", // 當在add模式中提交資料時,操作的名稱
                           //deloper:"del", // 當在delete模式中提交資料時,操作的名稱
                           //subgridid:"id", // 當點選以載入資料到子表時,傳遞的資料名稱
                           //npage:null,
                           //totalrows:"totalrows" // 表示需從Server得到總共多少行資料的引數名稱,參見jqGrid選項中的rowTotal
                           },
                 postData: {//查詢區資料    
                            "cchl":ss,    
                            "keyword":test   
                               },
                 mtype:"post",//請求型別
                 url:'${ctx}/sys/menu/jqgridlist',//請求資料的url
                 datatype:"json",//請求資料返回的型別
                 colNames:[//列名    
                           "id",
//                            "序號",
                           "名稱",
                           "連結",
                           "排序",
                           "可見",
                           "許可權標識",
                           "操作列"
                           ],  
                 colModel:[//獲取json資料,name必須小寫,index索引允許大些但必須和json資料中相同
                           {name:"id",index:"id",align:'center',frozen:true,hidden:true,key:true},// frozen : true列凍結  hidden:true 隱藏列
//                            {name:"rowNum",index:"rowNum",align:'center',width:'50px',sortable: false},  
                           {name:"name",index:"name",align:'center',width:'270px'},  
                           {name:"href",index:"href",align:'center',width:'150px'},  
                           {name:"sort",index:"sort",align:'center',width:'190px'},  
                           {name:"iShow",index:"iShow",align:'center',width:'170px'},  
                           {name:"permission",index:"permission",align:'center',width:'170px'},  
                           {name:"aaa",index:"aaa",align:'center',width:'270px',
                               formatter: function (cellvalue, options, rowObject) {
                                   return '<div class="padding_buttom1">'
                                            + '<input type="button" value="檢視" class="btn mybtn_primary btn-xs" onclick="detail(\''+rowObject.id+'\')"/>'
                                            + '<shiro:hasPermission name="sys:office:edit">'
                                            + '<input type="button" value="修改" class="btn mybtn_primary btn-xs" onclick="onShow(\''+rowObject.id+'\')"/>'
                                            + '</shiro:hasPermission>'
                                            + '<shiro:hasPermission name="sys:office:del">'
                                            + '<input type="button" value="刪除" class="btn mybtn_primary btn-xs" onclick="ondelRow(\''+rowObject.id+'\')"/>'
                                            + '</shiro:hasPermission>'
                                            + '<shiro:hasPermission name="sys:office:add">'
                                            + '<input type="button" value="新增下級機構" class="btn mybtn_primary btn-xs" onclick="onXiaJi(\''+rowObject.id+'\')"/>'
                                            + '</shiro:hasPermission>'
                                       + '</div>';
                               }
                           },
                          ],   
                 rowNum:100,//預設當前頁顯示資料條數
                 rowList:[100,200,500,1000],//頁面顯示資料自選列表
                 sortname:"",//預設排序列
                 viewrecords:true,//是否要顯示總記錄數
                 multiselect: true,//複選框  
                 shrinkToFit:false,
//                  multiboxonly:true,//複選框單選
//                  footerrow: true,//開啟彙總行(列彙總)
//                  gridComplete:columnSummary,//彙總函式
                 pager:"#pager_list",//頁面資訊顯示位置
                 width:$(window).width()-1,
                 height:$(window).height()-139,
                 jsonReader:{//讀取資料
                             root:"rows",//資料資訊
                             total:"total",//總頁數
                             page:"page",//當前頁碼
                             records:"records",//資料總條數
                             repeatitems:false
                            },
                     treeReader : {  
                      loaded_field:"laoded",
                      level_field: "level",  
                      parent_id_field: "parent1",   
                      leaf_field: "leaf",  
                      expanded_field: "expanded"  
                    },  
                    //右鍵觸發事件
                    onRightClickRow:function(rowid,iRow,iCol,e){
//                         alert("右鍵"+rowid);
                        
                    },
//                    //單機觸發事件
//                    onCellSelect:function(rowid,iCol,cellcontent,e){
//                        alert("單機"+rowid);
//                    },
                    ondblClickRow:function(rowid,iRow,iCol,e){
//                         alert("雙擊"+rowid);
                        /* var parent = $("#table_list").jqGrid("getLocalRow", rowid));
                        alert(parent); */
                    },
//                    onSelectRow:function(rowid,status){
//                        alert("選中"+rowid);
//                    },
                });
         }
</script>