如何定义一个递归使子节点添加到父节点中,加载角色的时候会把所有和它相关的权限都加载出来,数据库设计如下:

解决方案 »

  1.   

    哦,不好意思,图片出错了,如下:
    http://p6.images22.51img1.com/6000/typhoon365/6e5a28db2fdbf57f84565a8dddb40543.jpg
      

  2.   

    我是想定义一个方法,使得 二级菜单.right_parent_code = 一级菜单.right_code 的所有二级菜单添加到一级菜单中,java的方法,最好是使用递归。 
      

  3.   

    <%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
    <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <link rel="stylesheet" type="text/css" href="/Czhd/theme/2/style.css">
    <link rel="stylesheet" type="text/css" href="/Czhd/theme/2/menu.css"><html:html lang="true">
    <head>
    <html:base />
    <title>菜单页</title> <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is menu page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    --> <c:set var="c_mmenu" value=""></c:set>
    <c:set var="c_smenu" value=""></c:set>
    <c:set var="i" value="0"></c:set>
    <c:set var="k" value="0"></c:set>
    </head>
    <body class="panel">
    <style>
    A.applink:hover {border: 2px dotted #DCE6F4;padding:2px;background-color:#ffff00;color:green;text-decoration:none}
    A.applink       {border: 2px dotted #DCE6F4;padding:2px;color:#2F5BFF;background:transparent;text-decoration:none}
    A.info          {color:#2F5BFF;background:transparent;text-decoration:none}
    A.info:hover    {color:green;background:transparent;text-decoration:underline}
    </style>
    <p align="center">
    --主菜单--
    </p>
    <div id="body">
    <!-- OA树开始-->
    <a id="expand_link" href="javascript:menu_expand();"><u><span
    id="expand_text">展开</span> </u> </a>
    <ul id="menu">
    <c:forEach items="${menus}" var="mmenu" varStatus="s">
    <c:if test="${mmenu.menuGroupName != c_mmenu}" var="condition">
    <c:set var="c_mmenu" value="${mmenu.menuGroupName}" />
    <c:set var="i" value="${i+1}"></c:set>
    <!-- 写主菜单标签:  ${c_mmenu}    -->
    <li class="L1">
    <a href="javascript:c(m0${i});" id="m0${i}"><span><img
    src="/Czhd/images/menu/em.gif" align="Middle"/>
    ${c_mmenu}</span> </a>
    </li>
    <ul id="m0${i}d" style="display:none;" class="U1">
    <!-- ***写子菜单标签***  ${mmenu.menuName} *** -->
    <c:forEach items="${menus}" var="smenu">
    <c:if test="${c_mmenu == smenu.menuGroupName}">
    <c:set var="k" value="${k+1}"></c:set>
    <li class="L22">
    <a href="javascript:a('${smenu.url}','${i}${k}');"
    id="f${i}${k}"><span><img
    src="/Czhd/images/menu/url.gif" align="absMiddle" />
    ${smenu.menuName}</span></a>
    </li>
    </c:if>
    </c:forEach>
    </ul>
    </c:if>
    </c:forEach>
    </ul>
    </div>
    <div id="bottom"></div>
    <script language="JavaScript">
    var cur_id="";
    var flag=0,sflag=0;//-------- 菜单点击事件 -------
    function c(srcelement)
    {
      var targetid,srcelement,targetelement;
      var strbuf;  //-------- 如果点击了展开或收缩按钮---------
      targetid=srcelement.id+"d";
      targetelement=document.getElementById(targetid);  if (targetelement.style.display=="none")
      {
         srcelement.className="active";
         targetelement.style.display='';     menu_flag=0;
         expand_text.innerHTML="收缩";
      }
      else
      {
         srcelement.className="";
         targetelement.style.display="none";     menu_flag=1;
         expand_text.innerHTML="展开";
         var links=document.getElementsByTagName("A");
         for (i=0; i<links.length; i++)
         {
           srcelement=links[i];
           if(srcelement.parentNode.className.toUpperCase()=="L1" && srcelement.className=="active" && srcelement.id.substr(0,1)=="m")
           {
              menu_flag=0;
              expand_text.innerHTML="收缩";
              break;
           }
         }
      }
    }
    function set_current(id)
    {
       cur_link=document.getElementById("f"+cur_id)
       if(cur_link)
          cur_link.className="";
       cur_link=document.getElementById("f"+id);
       if(cur_link)
          cur_link.className="active";
       cur_id=id;
    }
    //-------- 打开网址 -------
    function a(URL,id)
    {
       set_current(id);
       if(URL.substr(0,7)!="http://" && URL.substr(0,6)!="ftp://")
          URL = "/Czhd"+URL;
       parent.working_window.location=URL;
    }
    function b(URL,id)
    {
       set_current(id);
       URL = "/app/"+URL;
        parent.openURL(URL,0);
    }
    function d(URL,id)
    {
       set_current(id);
       URL = "/fis/"+URL;
        parent.openURL(URL,0);
    }
    //-------- 菜单全部展开/收缩 -------
    var menu_flag=1;
    function menu_expand()
    {
      if(menu_flag==1)
         expand_text.innerHTML="收缩";
      else
         expand_text.innerHTML="展开";  menu_flag=1-menu_flag;  var links=document.getElementsByTagName("A");
      for (i=0; i<links.length; i++)
      {
        srcelement=links[i];
        if(srcelement.parentNode.className.toUpperCase()=="L1" || srcelement.parentNode.className.toUpperCase()=="L21")
        {
          targetelement=document.getElementById(srcelement.id+"d");
          if(menu_flag==0)
          {
            targetelement.style.display='';
            srcelement.className="active";
          }
          else
          {
            targetelement.style.display="none";
            srcelement.className="";
          }
        }
      }
    }</script>
    </body>
    </html:html>