做了一个差不多的,看看对你有没有帮助
我定义了一个object[][],类试于你那张表static public final int MENU = 0;  static public final int MENUITEM = 1;  static public final int CHECKBOXMENUITEM = 2;  static public final int LINE = 3;
 //菜单id 菜单名字 父节点菜单id 菜单类型 图片
static private final Object[][] CONTENTS = {
  {id,desc,parentid,type,icon}
  {............},
  ...
}
再利用递归生成菜单
  private void createMenu(Integer i) {
    Object[] o = mr.getMenuObject(i);//得到某个id对应的记录
    if (o != null) {
      switch ( ( (Integer) o[3]).intValue()) {
        case MenuResource.MENU:
          JMenu m = new JMenu(o[1].toString());
          if (o[4] != null) {
            m.setIcon(Misc.getIcon("./image/ui/" + o[4].toString()));//设置图标          }
          mr.setMenu(i, m);
          if (mr.getParentMenu(i) == null) {
            add(m);
          }
          else {
            mr.getParentMenu(i).add(m);
          }
          break;
        case MenuResource.MENUITEM:
          TNIMSMenuItem mi = new TNIMSMenuItem(o[1].toString(), i
                                               .intValue());
          mi.setEnabled(Misc.loginUser
                       .checkMenu(o[0].toString()));
          if (o[4] != null) {
            mi.setIcon(Misc.getIcon("./image/ui/" + o[4].toString()));
          }
          if (mr.getParentMenu(i) != null) {
            mr.getParentMenu(i).add(mi);
            mi.addActionListener(menuAction);
          }
          break;
        case MenuResource.CHECKBOXMENUITEM:
          break;
        case MenuResource.LINE:
          if (mr.getParentMenu(i) != null) {
            mr.getParentMenu(i).addSeparator();
          }
          break;
      }
    }
    ArrayList al = mr.getChildrenKey(i);
    for (int j = 0; j < al.size(); j++) {
      Integer key = (Integer) al.get(j);
      createMenu(key);
    }
  }

解决方案 »

  1.   

    这种情况跟权限管理中的菜单树差不多,可以参照一下开源项目,有个 XLoadTree 挺不错的,通过XML与数据库交互,用JS从XML中取数据,效率还不错,或者可以参考 struts-menu ,应该能够解决你的问题
      

  2.   

    这个我写过,不过单纯用JAVABEAN就不好写了
    给你提供两种方法
    一是,一次把所有单位信息取出来放在文件或者页面中,再用客户端脚本(javascript)解析,这种方法也比较简单些
    二(我用的是STRUTS),如果要动态的取得下一级单位,选择了上一级才在页面上显示下一级.可以在前台页面设置一个hidden区域,存的是提交类型,配合javascript的脚本,然后将表单提交到一个action,根据提交过来的参数进行取某一级单位数据的操作,前面已经取出的单位数据可以存在SESSION里
      

  3.   

    说的可能比较模糊
    给你一个第一种方法的例子
    ------------------------------------------------------------
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <body>
    <select name=category></select>
    <select name=one></select>
    <select name=two></select>
    <select name=three></select>
    <input name="result" readonly="true">
    <input name="result2" readonly="true">
    <script>
    var arrSel=["category","one","two","three"];//arrSel定义了要修改的下拉框和xml数据的节点名称
    </script>
    <xml id=xmldata>
    <xmldata>
    <category name="校级管理员" value="*">
    <one name="" value="*">
    <two name="" value="*">
    <three name="" value="*" />
    </two>
    </one>
    </category>
    <category name="一级单位(院)" value="2001">
    <one name="材料学院" value="150000">
    <two name="高分子材料所" value="150400">
    <three name="" value="" />
    </two>
    </one>
    <one name="外国语学院" value="210000">
    <two name="英语系" value="210100">
    <three name="uid1" value="一点" />
    <three name="uid1" value="一点" />
    <three name="uid1" value="一点" />
    </two>
    </one>
    </category>
    <category name="系级管理员" value="210000">
    <one name="外国语学院" value="210000">
    <two name="英语系" value="210100">
    <three name="uid1" value="一点" />
    <three name="uid1" value="五点" />
    <three name="uid1" value="九点" />
    </two>
    </one>
    </category>
    </xmldata>
    </xml><script>
    function qswhXml(num){
    /******* by qiushuiwuhen(2002-5-17) ********/
    var i,j,arrTemp=[],arrResult=[];
    for(i=0;i<num;i++){
    arrTemp[i]=document.all(arrSel[i]).options[document.all(arrSel[i]).selectedIndex].text;
    arrResult[i]=document.all(arrSel[i]).options[document.all(arrSel[i]).selectedIndex].value;
    }
    if(num==arrSel.length){//这里处理最后的数据。
    document.all("result").value="选中了("+arrTemp+")";
    document.all("result2").value="选中了("+arrResult+")";
    return;
    }
    with(document.all(arrSel[num])){
    length=0;
    var obj=document.all.xmldata.XMLDocument.childNodes[0];
    //var obj2=document.all.xmldata.XMLDocument.childNodes[0];
    for(i=0;i<num;i++){
    obj=obj.selectSingleNode(arrSel[i]+'[@name="'+arrTemp[i]+'"]');
    //obj2=obj2.selectSingleNode(arrSel[i]+'[@value="'+arrResult[i]+'"]');
    }
    for(i=0;i<obj.childNodes.length;i++){
    if(obj.childNodes[i].getAttribute("name")==null){
    options[length++].text="";
    }else{
    options[length++].text=obj.childNodes[i].getAttribute("name");
    }
    options[length-1].value=obj.childNodes[i].getAttribute("value");
    }
    onchange=new Function("qswhXml("+(num+1)+")");
    onchange();
    }
    }
    qswhXml(0);
    </script>
    </body>
    </html>
      

  4.   

    用javascript来实现,我倒是会的,可我们头非要用javabean来实现,我就不会了
    to voxer(voxer):你的那个应该是菜单树吧,我要的是下拉菜单哦,我不会改的
      

  5.   

    http://community.csdn.net/Expert/topic/3949/3949200.xml?temp=.8189813http://www.51forbes.net/dhtml/dyxmlsel/
      

  6.   

    唉,我不要用javascript实现,我就是要用javabean,我说了领导要求的,没办法,如果用javascript例子倒是挺多的,但我现在就是要用javabean呀,烦,各位哥哥姐姐弟弟妹妹们,帮帮我吧
      

  7.   

    我自己仿照javascript写了一个javabean,不过编译有错误,是我瞎写的,不知道怎么改,要不大家看看怎么弄?
    package com.zxnp.su_gang.oa.beans;import java.util.*;
    import java.sql.*;public class bmlbbean {
     
     public static String changelocation(String id, String cnm, String nextid, String tbl,String select1,String select2) {
      String rs1="select id,cnm,nextid from tbl where nextid=select1";
      if (rs1.rowcount != 0){
                    String strRet = "";

    strRet = "<select name=\"" + select2 + "\" id=\"" + select2 + "\" onchange=\"" + changelocation(id,cnm,nextid,tbl,select2,select3) + "\"";

    strRet = strRet + ">";

    strRet = strRet + "<option value=\"\">" + ---- + "</option>";

    int onecount;
               onecount=0;
            Object[][] subcat = new Array();
                       String rs="select id,cnm,nextid from tbl order by id";
                        int count = 0;
                        while (rs.Next()){
        subcat[count]= new Array("rs.getString(\"id\")","rs.getString(\"cnm\")","rs.getString(\"nextid\")");
             count = count + 1;
    }
                onecount=count;
            
        int i;
        for (i=0;i<onecount;i++){
            if (subcat[i][2] == select1){
                 strRet = strRet + "<option value=\"" + subcat[i][0] + "\">" + 
    subcat[i][1] + "</option>";
            }        
        }


    strRet = strRet + "</select>"; return strRet;
                  }
                 }      
    }
      

  8.   

    http://www.51forbes.net/dhtml/dyxmlsel/
    用的是XML满足你的JAVABEAN的要求
    不过你写的BEAN好像不对啊,
    现在BEAN可以像你那样定义方法吗?我不知道
    BEAN里面只有属性和getter和setter方法
    如:
    class public SampleBean {
        private String id;
        private String pid;
        private String value;
        private String name;
        public String getId() {
            return this.id;
        }
        /*略pid value name 的getter方法*/
        public void setId(String id) {
            this.id = id;
        }
        /*略pid value name 的setter方法*/
    }
      

  9.   

    http://www.51forbes.net/dhtml/dyxmlsel/
    看不到代码呀,还有这是我第一次自己写javabean呀,所以肯定漏洞百出,不过像我那样写应该是可以的,我看到过
      

  10.   

    我又写了个js的,但是有问题
    function changelocation(String id, String cnm, String nextid, String tbl,String select1,String select2) {
    <%String rs1="select id,cnm,nextid from tbl where nextid=select1";%>
      if (rs1.rowcount != 0){
            String strRet = "";

    strRet = "<select name=\"" + select2 + "\" id=\"" + select2 + "\" onchange=\"" + changelocation(id,cnm,nextid,tbl,select2,select3) + "\"";
    strRet = strRet + ">";
    strRet = strRet + "<option value=\"\">" + --请选择-- + "</option>";

    var onecount;//定义变量
        onecount=0;//赋值为o
        subcat = new Array();//定义个数组
        <%String rs="select id,cnm,nextid from tbl order by id";
                        int count = 0;
                        while (rs.Next()){%>
        subcat[<%=count%>] = new Array("<%=rs.getString("id").trim()%>","<%=rs.getString("cnm").trim()%>","<%=rs.getString("nextid").trim()%>");
            <%
             count = count + 1;
    }
            %>
    onecount=<%=count%>;
            
        for (i=0;i<onecount;i++){
            if (subcat[i][2] == select1){
                 strRet = strRet + "<option value=\"" + subcat[i][0] + "\">" + 
    subcat[i][1] + "</option>";
            }        
        }


    strRet = strRet + "</select>"; return strRet;
                  }
                 }      
    }
      

  11.   

    <HTML>
    <HEAD><TITLE>XML多级关联菜单</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=utf-8">
    <SCRIPT type=text/JavaScript>
    function dyXmlSel(_0x010203, _0x032134){
    function _0x532316(_0x863750){
    var _0x287161=0;
    if (_0x863750){
    var _0x684958=document.all(_0x010203[_0x863750-1]);
    _0x287161=_0x684958.options[_0x684958.selectedIndex].id;
    }
    if (isNaN(_0x287161)) throw new Error("<Item> attribute 'id' must be a number.");
    var _0x526419=document.all(_0x032134).XMLDocument.selectNodes("Item[@pid="+_0x287161+"]");
    with(document.all(_0x010203[_0x863750])){
    length=0;
    for(var _0x884737=0;_0x884737<_0x526419.length;_0x884737++){
    var _0x536271=new Option(_0x526419[_0x884737].getAttribute("text"),_0x526419[_0x884737].getAttribute("value")||_0x526419[_0x884737].getAttribute("text"));
    _0x536271.id=_0x526419[_0x884737].getAttribute("id");
    options[_0x884737]=_0x536271;
    }
    if (!_0x884737){
    style.display='none';
    _0x529683=new Option("--",null);
    _0x529683.id=-1;
    options[0]=_0x529683;
    }else{
    style.display='';
    }
    options[0].selected=true;
    if(++_0x863750< _0x010203.length){
    onchange=function(){ _0x532316(_0x863750)};
    _0x532316(_0x863750);
    }
    }
    }
    _0x532316(0);
    }
    onload = function(){ 
    dyXmlSel(["a","b","c","d","e","f"], "oXML")
    }
    </SCRIPT>
    </HEAD><BODY>
    <P>&nbsp;</P>
    <FORM class=center>
    <SELECT id=a></SELECT>
    <SELECT id=b></SELECT>
    <SELECT id=c></SELECT>
    <SELECT id=d></SELECT>
    <SELECT id=e></SELECT>
    <SELECT id=f></SELECT>
    </FORM>
    <xml id=oXML>
    <?xml version="1.0" encoding="GBK"?> 
    <Root>
    <Item id="1" pid="0" text="北京市" value="北京市" /> 
    <Item id="2" pid="1" text="市辖区" value="市辖区" /> 
    <Item id="3" pid="2" text="东城区" value="东城区" /> 
    <Item id="4" pid="2" text="西城区" value="西城区" /> 
    <Item id="5" pid="2" text="崇文区" value="崇文区" /> 
    <Item id="6" pid="2" text="宣武区" value="宣武区" /> 
    <Item id="7" pid="2" text="朝阳区" value="朝阳区" /> 
    <Item id="8" pid="2" text="丰台区" value="丰台区" /> 
    <Item id="9" pid="2" text="石景山区" value="石景山区" /> 
    <Item id="10" pid="2" text="海淀区" value="海淀区" /> 
    <Item id="11" pid="2" text="门头沟区" value="门头沟区" /> 
    <Item id="12" pid="2" text="房山区" value="房山区" /> 
    <Item id="13" pid="1" text="市辖县" value="市辖县" /> 
    <Item id="14" pid="13" text="昌平县" value="昌平县" /> 
    <Item id="15" pid="13" text="顺义县" value="顺义县" /> 
    <Item id="16" pid="13" text="通县" value="通县" /> 
    <Item id="17" pid="13" text="大兴县" value="大兴县" /> 
    <Item id="18" pid="13" text="平谷县" value="平谷县" /> 
    <Item id="19" pid="13" text="怀柔县" value="怀柔县" /> 
    <Item id="20" pid="13" text="密云县" value="密云县" /> 
    <Item id="21" pid="13" text="延庆县" value="延庆县" /> 
    <Item id="22" pid="0" text="天津市" value="天津市" /> 
    <Item id="23" pid="22" text="市辖区" value="市辖区" /> 
    <Item id="24" pid="23" text="和平区" value="和平区" /> 
    <Item id="25" pid="23" text="河东区" value="河东区" /> 
    <Item id="26" pid="23" text="河西区" value="河西区" /> 
    <Item id="27" pid="23" text="南开区" value="南开区" /> 
    <Item id="28" pid="23" text="河北区" value="河北区" /> 
    <Item id="29" pid="23" text="红桥区" value="红桥区" /> 
    <Item id="30" pid="23" text="塘沽区" value="塘沽区" /> 
    <Item id="31" pid="23" text="汉沽区" value="汉沽区" /> 
    <Item id="32" pid="23" text="大港区" value="大港区" /> 
    <Item id="33" pid="23" text="东丽区" value="东丽区" /> 
    <Item id="34" pid="23" text="西青区" value="西青区" /> 
    <Item id="35" pid="23" text="津南区" value="津南区" /> 
    <Item id="36" pid="23" text="北辰区" value="北辰区" /> 
    <Item id="37" pid="22" text="市辖县" value="市辖县" /> 
    <Item id="38" pid="37" text="宁河县" value="宁河县" /> 
    <Item id="39" pid="37" text="武清县" value="武清县" /> 
    <Item id="40" pid="37" text="静海县" value="静海县" /> 
    <Item id="41" pid="37" text="宝坻县" value="宝坻县" /> 
    <Item id="42" pid="37" text="蓟县" value="蓟县" /> 
    <Item id="3402" pid="0" text="台湾省" value="台湾省" /> 
    <Item id="3403" pid="0" text="解放军0" value="value解放军0" /> 
    <Item id="3404" pid="3403" text="解放军1" value="value解放军1" /> 
    <Item id="3405" pid="3404" text="解放军2" value="value解放军2" /> 
    <Item id="3406" pid="3405" text="解放军3" value="value解放军3" /> 
    <Item id="3407" pid="3406" text="解放军4" value="value解放军4" /> 
    <Item id="3408" pid="3407" text="解放军5" value="value解放军5" /> 
    </Root>
    </xml>
    </BODY>
    </HTML>
      

  12.   

    http://www.51forbes.net/dhtml/dyxmlsel/
    我对这个页面做了一些修改至于bean呢,我认为这样就行:
    public class AddressBean
    {
        private String id;
        private String pid;
        private String text;
        private String value;
        public String getId()
        {
            return id;
        }
        public String getPid()
        {
            return pid;
        }
        public String getText()
        {
            return text;
        }
        public String getValue()
        {
            return value;
        }
        public void setId(String id)
        {
            this.id = id;
        }
        public void setPid(String pid)
        {
            this.pid = pid;
        }
        public void setText(String text)
        {
            this.text = text;
        }
        public void setValue(String value)
        {
            this.value = value;
        }
    }
    它是帮助生成xml里面那段用的
      

  13.   

    to fosking(寒羽良天) :这样数据不是静态的吗?我想要动态的,从数据库里获取的
      

  14.   

    xml是不是要在代码里导入什么语句?