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>