1,在没有树形控件等的情况下,后台用sql查询出树形结构数据,前台直接根据标记遍历(其实属性控件也是如此)(用js直接遍历数据)
2,还有中方式后台根据父子关系组装成list,前台用jsp标签遍历父子
<div id="div1" style="width:100%;">
</div>
$(function(){
alert("2");
appendTable();
});
function appendTable() {
alert("11");
var roleId=$("input[name='roleId']").val();
var leave=$("input[name='leave']").val();
var pId=$("input[name='pId']").val();
var dataParent = {
roleId: roleId,
leave:leave,
pId:pId
};
$.ajax({
type: "post",
url: "${pageContext.request.contextPath}/system/opmRole/Auths",
data: dataParent,
success: function (data) {
if(data!=''&&data!=null){
//alert(data);<table
var div1=$("#div1");
//var table1=$("#table1");
var table1=$("<table></table>");
var arr = eval(data);
for(j=0;j<arr.length;j++){
//alert(arr[j]);
//alert(arr[j].leave);
if(arr[j].leave=='1'){//包括两级文件夹
var row =$("<tr></tr>");
var td =$("<td></td>");
td.append($(arr[j].str));
row.append(td);
table1.append(row);
}
var row2 ;
if(arr[j].leave=='2'){//页面
row2 =$("<tr></tr>");
var td =$("<td></td>");
td.append(arr[j].str);
row2.append(td);
table1.append(row2);
}if(arr[j].leave=='3'){//按钮
var td =$("<td></td>");
td.append(arr[j].str);
table1.find("tr:last").append(td);
}
//table1.append(row2);
//var strq = JSON.stringify(table1);
////alert(strq);
}
div1.html(table1);
//alert(table1);
}else{
alert("你输入的会员编号不存在!");
}
},
error:function(data){
alert("数据加载异常!");
}
});
}
//全选 选中多选框
function checkedAllBox(obj) {
if(obj.checked){
var a = document.getElementsByName(obj.value);
for (i = 0; i < a.length; i++) {
a[i].checked=true;
}
}else{
var a = document.getElementsByName(obj.value);
for (i = 0; i < a.length; i++) {
a[i].checked=false;
}
}
}
迭代的时候各个层次的数据过了方法就没有,不能共享,要实现类似共享累加:
1,返回值累加,用一个变量专门累加返回值
2,第二次回调前传入要共享的参数
@SuppressWarnings("rawtypes")
@RequestMapping(value="/system/opmRole/Auths")
@ResponseBody
public JSONArray treeRead(@RequestParam(value="leave") String leave,@RequestParam(value="roleId") String roleId,@RequestParam(value="pId") String pId,@RequestParam(value="groupId",required=false) String groupId1){
List<String> strl= new ArrayList<String>();
String str="";
JSONArray JsonArray = new JSONArray();
Map<String,Object> param = new HashMap<String,Object>();
param.put("pId", pId);
//OpmMenufolderTreeVo treeVos= new OpmMenufolderTreeVo();
List<Map> map= opmMenufolderService.getfordMenuLimt(param);
Map<String,Object> param1 = new HashMap<String,Object>();
String groupId=groupId1;
for(Map p: map){
//List<OpmMenufolderTreeVo> treechild= new ArrayList<OpmMenufolderTreeVo>();
//List<OpmMenuitemTreeVo> opmMenuitem= new ArrayList<OpmMenuitemTreeVo>();
param1.put("pId", p.get("ID"));
String l= (String) p.get("LEAVE");
if("1".equals(l)){
//str+=p.get("ID")+"="+p.get("NAME")+"\n";
if("100000".equals(p.get("PARENTID")+"")){
groupId=(String)p.get("ID");
//OpmMenufolderTreeVo treeVo= new OpmMenufolderTreeVo();
//treeVo.setId(p.get("ID")+"");
//treeVo.setName(p.get("NAME")+"");
//treeVo.setGroupIp(groupId);
//treechild.add(treeVo);
//treeVos.setChildForld(treechild);
str+="<label style=\"float:left\"><input type=\"checkbox\" class=\"checkboxCtrl\" value="+p.get("ID")+" group="+groupId+" selectType=\"invert\" />"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str", "<label style=\"float:left\"><input type=\"checkbox\" class=\"checkboxCtrl\" value="+p.get("ID")+" onclick=\"checkedAllBox(this);\" group="+groupId+" //>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}else{
//OpmMenuitemTreeVo treeVo= new OpmMenuitemTreeVo();
//treeVo.setId(p.get("ID")+"");
//treeVo.setName(p.get("NAME")+"");
//treeVo.setGroupIp(groupId);
//opmMenuitem.add(treeVo);
//treeVos.setOpmMenuitem(opmMenuitem);<input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId",groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label> "+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}
if("2".equals(l)){
if(Integer.valueOf(leave)<0){
if(Integer.valueOf(p.get("LEAVE1")+"") >=Integer.valueOf(leave)){
//str+=p.get("ID")+"="+p.get("NAME")+"\n";
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label> <input type=\"checkbox\" value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}else{
//TODO
Map<String,Object> param2 = new HashMap<String,Object>();
param2.put("menuItemId", p.get("ID"));
param2.put("menuItemLimitId", null);
param2.put("roleId", roleId);
param2.put("displayOrder", Integer.valueOf(-1));
List<OpmRolelimit> rl= opmRolelimitService.getRoleLimitByTJ(param2);
if(rl!=null&&rl.size()>0&&Integer.valueOf(p.get("LEAVE1")+"") >=Integer.valueOf(leave)){
//str+=p.get("ID")+"="+p.get("NAME")+"\n";
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label> <input type=\"checkbox\" value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}
}
if("3".equals(l)){
Map<String,Object> param2 = new HashMap<String,Object>();
param2.put("menuItemId", p.get("PARENTID"));
param2.put("menuItemLimitId", p.get("ID"));
param2.put("roleId", roleId);
param2.put("displayOrder", null);
List<OpmRolelimit> rl2= opmRolelimitService.getRoleLimitByTJ(param2);
String tempg=groupId;
if(rl2!=null&&rl2.size()>0){
//str+=p.get("ID")+"="+p.get("NAME")+"\n";
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label><input type=\"checkbox\" value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}
str+=treeRead(leave,roleId,p.get("ID")+"",groupId);
//strl.add(treeRead(param1,level,roleCurId,groupId));
JsonArray.addAll(treeRead(leave,roleId,p.get("ID")+"",groupId));
}
return JsonArray;
}
service:
@Override
public List<Map> getfordMenuLimt(Map<String,Object> param) {
// TODO Auto-generated method stub
List<Map> map = new ArrayList<>();
map= (List<Map>) opmMenufolderMapper.getfordMenuLimt(param);
return map;
}
map.java
public interface OpmMenufolderMapper extends Mapper<OpmMenufolder> {
List<?> getfordMenuLimt(Map<String,Object> param);
}
map.xml
<resultMap id="BaseResultMap" type="com.esteel.system.bean.OpmMenufolder" >
<!--
WARNING - @mbggenerated
-->
<id column="ID" property="id" jdbcType="VARCHAR" />
<result column="NAME" property="name" jdbcType="VARCHAR" />
<result column="DISPLAYORDER" property="displayorder" jdbcType="DECIMAL" />
<result column="PARENTID" property="parentid" jdbcType="VARCHAR" />
<result column="URI" property="uri" jdbcType="VARCHAR" />
<result column="DESCRIPTION" property="description" jdbcType="VARCHAR" />
<result column="ICONCSS" property="iconcss" jdbcType="VARCHAR" />
<result column="SUBSYSTEM" property="subsystem" jdbcType="VARCHAR" />
</resultMap>
<select id="getfordMenuLimt" resultType="map" parameterType="map">
select * from (select * from
(
select t.name name,t.id id,t.parentid parentid ,0 leave1,'1' leave from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid,o.level1 leave1,'2' leave from opm_menuitem o
union all select l.name name,l.id id,l.menuitemid ,l.level1 leave1,'3' leave from opm_menuitemlimit l
)
start with parentid is null connect by prior id=parentid ORDER SIBLINGS BY parentid) where parentid=#{pId}
</select>