做了一个差不多的,看看对你有没有帮助
我定义了一个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);
}
}
我定义了一个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);
}
}
给你提供两种方法
一是,一次把所有单位信息取出来放在文件或者页面中,再用客户端脚本(javascript)解析,这种方法也比较简单些
二(我用的是STRUTS),如果要动态的取得下一级单位,选择了上一级才在页面上显示下一级.可以在前台页面设置一个hidden区域,存的是提交类型,配合javascript的脚本,然后将表单提交到一个action,根据提交过来的参数进行取某一级单位数据的操作,前面已经取出的单位数据可以存在SESSION里
给你一个第一种方法的例子
------------------------------------------------------------
<!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>
to voxer(voxer):你的那个应该是菜单树吧,我要的是下拉菜单哦,我不会改的
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;
}
}
}
用的是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方法*/
}
看不到代码呀,还有这是我第一次自己写javabean呀,所以肯定漏洞百出,不过像我那样写应该是可以的,我看到过
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;
}
}
}
<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> </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>
我对这个页面做了一些修改至于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里面那段用的