如何用MVC模式来实现树形

如何用MVC模式来实现树形,第1张

前台js //打开菜单窗口function openMenuDialog(){var selected = $("#list").datagrid('getSelected') if (selected != null) {$("#id").val(selected.id) queryMenus(selected.id) $("#menuWindow").window("open") } else { $.messager.alert('提示', "未选择数据!")}}//角色-菜单信息入库function ajaxSubmit(rid,idstr){$.post("${ctx}/roleMenu/save.jhtml",{"roleId":rid,"ids":idstr},function(obj){$.messager.alert('提示',obj.msg) $("#menuWindow").window('close') },'json')} <!-- ztree --><script type="text/javascript">var tree = ""var setting = {check : {chkboxType:{"Y":"ps","N":"ps"},//勾选checkbox对于父子节点的关联关系chkStyle:"checkbox",enable : true //是否复选框},//数据data : {simpleData : {enable : true}}}//查询菜单信息function queryMenus(roleId){$.post('${ctx}/role/treedata.jhtml', {'roleId':roleId}, function(zNodes) {for (var i = 0i <zNodes.lengthi++) {if (zNodes[i].isParent) { } else {//zNodes[i].icon = "${ctxStatic}/images/532.ico"//设置图标}}tree = $.fn.zTree.init($("#tree"), setting, zNodes) tree.expandAll(true)//全部展开//var nodes = treeObj.getNodes() }, 'json')}//获取选中节点function onCheck(){ var rid = $("#id").val()var treeObj=$.fn.zTree.getZTreeObj("tree")var nodes=treeObj.getCheckedNodes(true)var ids = new Array()for(var i=0i<nodes.lengthi++){//获取选中节点的值 ids.push(nodes[i].id) // v+=nodes[i].id + "," //alert(nodes[i].id) }ajaxSubmit(rid,ids)}</script>后台:action @RequestMapping(value = "/treedata.jhtml")@ResponseBodypublic String treedata(HttpServletRequest request, Model model) {DynamicParams params = new DynamicParams(request) List<Map<String, Object>>mapList = Lists.newArrayList()params.put("allMenu", "allMenu") List<Menu>list = menuManager.findMenuList(params)List<RoleMenu>roleMenus = roleMenuManager.findList(params)for(int i=0i<list.size()i++){Menu e = list.get(i) Map<String, Object>map = Maps.newHashMap() map.put("id", e.getId()) map.put("pId", e.getParentId()!=null?e.getParentId():0) map.put("name", e.getName()) for(RoleMenu roleMenu:roleMenus){if(roleMenu.getMenuId()==e.getId()){map.put("checked", true) }}mapList.add(map) }return toJson(mapList) } servicepublic List<Menu>findMenuList(DynamicParams params) {List<Menu>menus = new ArrayList<Menu>()if ("allMenu".equals(params.getString("allMenu"))) {menus = menuDao.findList(params) } else {// 通过用户查询角色List<UserRole>userRoles = userRoleDao.findList(params) // 通过角色查询菜单List<RoleMenu>roleMenus = new ArrayList<RoleMenu>() if (userRoles != null &&userRoles.size() >0) {for (UserRole userRole : userRoles) {params = new DynamicParams() if (userRole != null) {if (userRole.getRoleId().equals(params.getString("rid"))) {break }params.put("roleId", userRole.getRoleId().toString()) List<RoleMenu>rms = roleMenuDao.findList(params) for (RoleMenu roleMenu : rms) {roleMenus.add(roleMenu) }}}} // 查询菜单信息for (RoleMenu roleMenu : roleMenus) {if (roleMenu != null) {Menu menu = menuDao.find(roleMenu.getMenuId()) if(menu!=null){menus.add(menu) }}}menus = removeDuplicate(menus) Collections.sort(menus) }return menus } /** * 去除菜单中重复项 * * @param list * @return */private List<Menu>removeDuplicate(List<Menu>list) {List<Menu>result = new ArrayList<Menu>() Set<Long>menuIds = new HashSet<Long>() for (int i = 0i <list.size()i++) {Menu m = list.get(i) if (m != null &&menuIds.add(m.getId())) {result.add(m) }}return result }

jsp动态树形菜单须用到递归算法,比如在数据库有张表,parent表,parent的字段有id,name,depth,leve,ID自增,depth设置为级数,如这条数据最大,为0,如为字菜单就为1,而leve就指定它父节点的id,给段代码自己可以摸索下 public Vector getModuleTree()

{

Vector pclass = new Vector()

try

{

stmt =con.createStatement()

String sql = "select * from Module where parentid = 0"

rs = stmt.executeQuery(sql)

Module cvo = null

while(rs.next())

{

cvo = new Module()

cvo.setModule_id(rs.getInt("Module_id"))

cvo.setModule_name(rs.getString("Module_name"))

cvo.setModule_url(rs.getString("Module_url"))

cvo.setParentid(rs.getInt("parentid"))cvo.setRootid(rs.getInt("rootid"))cvo.setDepth(rs.getInt("depth"))pclass.add(cvo)

}

for (int i = 0i <pclass.size()i++)

{

Module pcvo = (Module) pclass.get(i)

ShowTreeMenu(pcvo)

}

con.commit() } catch (SQLException e)

{

e.printStackTrace()

} finally

{

try

{

if(rs!=null)

{

rs.close()

}

if(stmt!=null)

{

stmt.close()

}

if(con!=null)

{

con.close()

}

}

catch (SQLException e)

{

e.printStackTrace()

}

}

return classList

}

public void ShowTreeMenu(Module c)

{

Module ccvo = null

String sql = "select * from Module where parentid = " + c.getModule_id()

Vector cclass = new Vector()

try

{

Module cvotemp

stmt =con.createStatement()

rs = stmt.executeQuery(sql)

while(rs.next())

{

cvotemp = new Module()

cvotemp.setModule_id(rs.getInt("Module_id"))

cvotemp.setModule_name(rs.getString("Module_name"))

cvotemp.setModule_url(rs.getString("Module_url"))

cvotemp.setParentid(rs.getInt("parentid"))cvotemp.setRootid(rs.getInt("rootid"))cvotemp.setDepth(rs.getInt("depth"))cclass.add(cvotemp)

}

System.out.println(cclass.size()+"(((((((((((((((((((((((((9")

if (cclass.size() >0)

{

c.setHasChild("have")

classList.add(c)

for (int j = 0j <cclass.size()j++)

{

ccvo = (Module) cclass.get(j)

ShowTreeMenu(ccvo)

}} else

{

classList.add(c)

}

} catch (SQLException e)

{

e.printStackTrace()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6915780.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-30
下一篇2023-03-30

发表评论

登录后才能评论

评论列表(0条)

    保存