jsp3级级联菜单显示

曾经一度在为级联菜单而麻烦,花了好些功夫才做出来了,与大家一起分享,使用JavaScript结合Jsp从数据库读出的三级级联菜单,程序代码如下!

<!-----------

/*
* Created on 2005-4-7
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
* @author Rainpoem
*
*/

-->
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.sql.*"%>

<jsp:useBean id="con1" scope="page" class="com.Conn"/><--引用Bean-->
<jsp:useBean id="con2" scope="page" class="com.Conn"/>
<jsp:useBean id="con3" scope="page" class="com.Conn"/>
<jsp:useBean id="con4" scope="page" class="com.Conn"/>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>-------三级菜单级联-------</title>


<!-----------

以下为三级菜单级联,是从三表中取出数据,分别dept,member,attribute(部门,人员,属性)
级联索引字段为:
dept id
member dept_id
attribute member_id
但需要前两张表中有id编号字段,以做为菜单级联的数组号来索引和编组,为数值型
该程序在Sql Server与Tomcat中实现
各表结构为:
dept (id int 4,name char 20)
member (dept_id int 4,member_id int 4,member_name char 20)
attribute (member_id int 4,attribute_id int 4,attribute_name char 20)
(两级菜单级联则只需截去一级即可)

-->
<%
ResultSet sub1 = null; //dept
ResultSet sub2 = null; //member
ResultSet sub3 = null; //member
ResultSet sub4 = null; //attribute
%>

<script language='javascript'>
//将三级列表中的人员属性清空
function removeop()
{
var long = document.input.ssub.options.length;
var oOption = document.createElement("OPTION");

for(var i=0;i<=long;i++)
document.input.ssub.options.remove(i);
document.input.ssub.options.remove(0);
oOption.text="请选择人员属性";
oOption.value="0";
document.input.ssub.add(oOption);
}
</script>

<SCRIPT LANGUAGE="JavaScript">
var sSele = new Array; //用于储存member表信息
var sSele1 = new Array; //用于储存attribute表信息

sSele[0] = 'Obj.add(Option("请选择部门人员","0"));';
sSele1[0] = 'Obj.add(Option("请选择人员属性","0"));';
<%

int vid = 0; //部门id
int subid = 0; //人员id
int aid = 0; //属性id
String vnum = ""; //部门名称
String subname = ""; //人员姓名
String aname = ""; //属性名称

sub2 = con2.select("select * from dept");//将所有部门人员取出并根据部门id号存入sSele数组
while (sub2.next())
{
vid = sub2.getInt("id");
vnum = sub2.getString("name");
sub1=con1.select("select * from member where dept_id='"+vnum+"'");
%>
sSele[<%=vid%>]='Obj.add(Option("请选择人员","0"));';
<%
while(sub1.next())
{
subid=sub1.getInt("member_id");
subname=sub1.getString("member_name").trim();
%>
sSele[<%=vid%>]=sSele[<%=vid%>]+'Obj.add(Option("<%=subname%>","<%=subid%>"));';
<%
}
sub1.close();
}
sub2.close();

sub3 = con3.select("select * from member");//将所有人员属性取出并根据人员id号存入sSele1数组
while (sub3.next())
{
subid = sub3.getInt("id");
subname = sub3.getString("truename");
sub4=con4.select("select * from attribute where member_id="+subid);
%>
sSele1[<%=subid%>]='Obj.add(Option("请选择属性","0"));';
<%
while(sub4.next())
{
aid=sub4.getInt("attribute_id");
aname=sub4.getString("attribute_name").trim();
%>
sSele1[<%=subid%>]=sSele1[<%=subid%>]+'Obj.add(Option("<%=aname%>","<%=aid%>"));';
<%
}
sub4.close();
}
sub3.close();


%>
</SCRIPT>


<form name="input" method="post" action="#">
<table width="670" border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#3366FF">

<tr bgcolor="#ffffff">
<td bgcolor="#C4DFFB">请选择科室:</td>
<td bgcolor="#C4DFFB">
<select size="1" name="dept" ONCHANGE="removeop();Obj=this.form.sub; Obj.innerHTML=''; eval(sSele[this.value]);">
<option value="0">--请选择科室--</option>
<%
try{
ResultSet rst2 = con2.select("select id,name from dept");
while (rst2.next())
{
out.println("<option value = '"+rst2.getInt("id")+"'>" + rst2.getString("name") + "</option>");
}
con2.close();
}catch(Exception e){out.println(e);}
%>
</select>
</td>
</tr>
<tr bgcolor="#ffffff">
<td bgcolor="#C4DFFB">请选择科室人员:</td>
<td bgcolor="#C4DFFB">
<select size="1" name="sub" ONCHANGE="Obj=this.form.ssub; Obj.innerHTML=''; eval(sSele1[this.value]);">
<option value="0">请选择人员</option>
</select>
</td>
</tr>
<tr bgcolor="#ffffff">
<td bgcolor="#C4DFFB">请选择人员属性:</td>
<td bgcolor="#C4DFFB">
<select size="1" name="ssub">
<option value="0">请选择属性</option>
</select>
</td>
</tr>
</table>
</form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值