三级联动 文档和代码
如人员管理的对应的界面和代码
其涉及的文件有adminuser_list.jsp 、web.xml和SelectCropDepartServlet2.java、SelectDepartChuServlet.java 两个Servlet类文件。
其对应的adminuser_list.jsp 文件如下。
<%@ page contentType="text/html; charset=gbk" language="java" import="java.sql.*" errorPage="" %>
<%@ page import ="pub.*" %>
<%
int xxxx=Check.CheckPage(request,"admin_adminuser_list");
String Error="";
if (xxxx==1){
Error="<script>alert('你已掉线,需要重新登陆!');top.location.href='../login.jsp'</script>";
}else{
if (xxxx==2){
Error="<script>alert('你无权进入该页面!');history.back();</script>";
}
}
%>
<%=Error%>
<%
if (xxxx!=0){
return;
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>机构类型设置人员管理</title>
<link href="../css/putong.css" type="text/css" rel="stylesheet">
</head>
<script language="javascript">
var req;
var number='all'; //外,下拉框可显示全部部门&处
window.οnlοad=function()
{
}
function Change_Select(flag)
{
var flag1=flag;//是为了解决onchange()后值要改变&onload()(查询提交)后值要保存的问题
//alert(flag1);
var zhi = document.getElementById('Corp').value;
var hidden_depart=document.all.HiddenKeyDepart.value;
var url = "../selectCropDepart2?state="+number+"&keyDepart="+hidden_depart+"&id=" + escape(zhi)+"&flag="+flag1;
//alert(url);
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
parseMessage();
// update the HTML DOM based on whether or not message is valid
}else{
alert ("Not able to retrieve description" +req.status+req.statusText);
}
}
}
function parseMessage() {
var xmlDoc = req.responseXML.documentElement;
var xSel = xmlDoc.getElementsByTagName('select');
var select_root = document.getElementById('Depart');
select_root.options.length=0;
for(var i=0;i<xSel.length;i++)
{
var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
var xText = xSel[i].childNodes[1].firstChild.nodeValue;
var option = new Option(xText,xValue);
try
{
select_root.add(option);
}
catch(e)
{
}
}
}
function Change_Select2()
{
var zhi = document.getElementById('Depart').value;
var url = "../selectDepartChu?state="+number+"&id=" + escape(zhi);
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET", url, true);
req.onreadystatechange = callback2;
req.send(null);
}
}
function callback2() {
if (req.readyState == 4) {
if (req.status == 200) {
parseMessage2();
// update the HTML DOM based on whether or not message is valid
}else{
alert ("Not able to retrieve description" +req.status+req.statusText);
}
}
}
function parseMessage2() {
var xmlDoc = req.responseXML.documentElement;
var xSel = xmlDoc.getElementsByTagName('select');
var select_root = document.getElementById(' Chu ');
select_root.options.length=0;
for(var i=0;i<xSel.length;i++)
{
var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
var xText = xSel[i].childNodes[1].firstChild.nodeValue;
var option = new Option(xText,xValue);
try
{
select_root.add(option);
}
catch(e)
{
}
}
}
function loads(flag){
Change_Select(flag);
//Change_Select2();
}
function Add()
{
document.formlist.action="adminuser_edit.jsp?Oper=add&Key=0";
document.formlist.submit();
}
function Edit(key)
{
document.formlist.action="adminuser_edit.jsp?Oper=edit&Key="+key;
document.formlist.submit();
}
function Del (key)
{
if (window.confirm("确实要删除吗?"))
{
var a=showModalDialog("adminuser_ctl.jsp?Oper=del&Key="+key,"","status:no;resizable:yes;dialogHeight:410px;dialogWidth:460px;unadorne:yes");
if ((a==0))
{
document.formlist.submit();
}
}
}
function Purview(key)
{
var a=showModalDialog("role_purview.jsp?Oper=del&Key="+key,"","status:no;resizable:yes;dialogHeight:410px;dialogWidth:460px;unadorne:yes");
}
</script>
<body onload="loads(1)">
<%
String strCorp=request.getParameter("Corp");
String strDepart=request.getParameter("Depart");
String strChu=request.getParameter(" Chu ");
String strChuName="";
String strUserName=request.getParameter("UserName");
if(strCorp==null) strCorp="";
if(strDepart==null) strDepart="";
if(strChu==null) strChu="";
if(strUserName==null) strUserName="";
String strCropID1=(String)session.getAttribute("cropid");
//判断如果登陆员工是总公司之外的就只显示此员工所在的公司
if(strCropID1.equals("1")==false) strCorp=strCropID1;
Conn conn=new Conn ();
DataTable dtChuName=new DataTable();
String SqlChuName="";
%>
<form name="formlist" action="adminuser_list.jsp" method="post">
<table cellSpacing="0" cellPadding="0" width="100%" bgColor="#bfcae6" border="0" background="../images/subtitle.gif">
<tr>
<td width="100%" height="26"><DIV align="left"><FONT face="宋体" color="#ffffff"> 当前位置:系统管理>>人员管理>>人员列表</FONT></DIV></td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%" background="../images/ico_14.jpg">
<tr>
<td lign="right"> </td>
<td width="40" height="26" align="right" nowrap> 公司:</td>
<td width="110" align="left"><select style="width:100 " name="Corp" id="Corp" onChange="Change_Select(0)" ></select></td>
<td width="40" align="right" nowrap>部门:</td>
<td width="110" align="left"><select style="width:110 " name="Depart" id="Depart" onChange="Change_Select2()"></select></td>
<td width="40" align="right" nowrap>处室:</td>
<td width="110" align="left"><select style="width:110 " name="Chu" id=" Chu "></select></td>
<td width="65" align="right" nowrap>员工名称:</td>
<td width="70" align="right"><input type="text" name="UserName" class=input style="width:60px; font-size: 9pt "></td>
<td width="70" align="right"><input type="submit" class="button" value="查询" style="WIDTH:60px"></td>
<td width="70" align="right"><input type="button" class="button" value="添加" style="WIDTH: 60px" onClick="Add();"></td>
<td width="70" align="right"><input name="button" type="button" class="button" style="WIDTH: 60px" onClick="javascript:window.print();" value="打印"></td>
</tr>
</table>
<%
String sql="select a.UserID, a.UserCode,a.UserName,";
sql+=" CorpName=(Select MachName from sys04_Machine c where a.CropID=c.MachID ),";
sql+=" DepartName=(Select MachName from sys04_Machine d where a.DepartID=d.MachID ),";
sql+=" ChuName=(Select MachName from sys04_Machine e where a.ChuID=e.MachID ),";
sql+=" RoleName=(select RoleName from sys05_role b where b.roleid=a.roleid ) from employee01_Basic a where a.CropID=a.CropID";
if(strCorp.length()>0)
sql+=" and a.CropID = "+strCorp;
if (strDepart.length()>0 && strDepart.equals("Pselect")==false )
sql+= " AND a.DepartID = "+PubClass.getString(strDepart)+" ";
if (strChu.length()>0 && strChu.equals("Pselect")==false ) {
sql+= " AND a.ChuID = "+PubClass.getString(strChu)+" ";
SqlChuName="select * from sys04_Machine where MachID="+strChu;
conn.querySql(SqlChuName,dtChuName);
strChuName=dtChuName.getItemForName(0,"MachName").toString();
}
if (strUserName.length()>0 && strCorp.length()>0)
sql+= " AND a.UserName like '%"+PubClass.getString(strUserName)+"%'";
else if(strUserName.length()>0 && strCorp.length()==0)
sql+= " and a.UserName like '%"+PubClass.getString(strUserName)+"%'";
%>
<%
DataGrid dg=new DataGrid("1",request,"formlist",15,"");
DataGridColumnItem dgci=new DataGridColumnItem();
dgci.ColType=ColumnItemType.BindDataColumn;
dgci.HeadText="人员编码";
dgci.BindField="UserCode";
dgci.Width="20%";
dg.addColumn(dgci);
dgci=new DataGridColumnItem();
dgci.ColType=ColumnItemType.BindDataColumn;
dgci.HeadText="人员姓名";
dgci.BindField="UserName";
dgci.Width="15%";
dg.addColumn(dgci);
dgci=new DataGridColumnItem();
dgci.ColType=ColumnItemType.BindDataColumn;
dgci.HeadText="人员角色";
dgci.BindField="RoleName";
dgci.Width="15%";
dg.addColumn(dgci);
dgci=new DataGridColumnItem();
dgci.ColType=ColumnItemType.BindDataColumn;
dgci.HeadText="公司";
dgci.BindField="CorpName";
dgci.Width="10%";
dg.addColumn(dgci);
dgci=new DataGridColumnItem();
dgci.ColType=ColumnItemType.BindDataColumn;
dgci.HeadText="部门";
dgci.BindField="DepartName";
dgci.Width="20%";
dg.addColumn(dgci);
dgci=new DataGridColumnItem();
dgci.ColType=ColumnItemType.BindDataColumn;
dgci.HeadText="处室";
dgci.BindField="ChuName";
dgci.Width="10%";
dg.addColumn(dgci);
dgci=new DataGridColumnItem();
dgci.ColType=ColumnItemType.ButtonColumn;
//dgci.HeadText="编辑";
dgci.BindField="编辑";
dgci.Script="Edit([UserID]);";
dgci.Width="10%";
dg.addColumn(dgci);
dg.bindSql(sql);
out.print(dg.ShowGrid());
//(1)…………………………………………………..
//判断如果登陆员工是总公司之外的就只显示此员工所在的公司
if(strCropID1.equals("1")==false) out.print(PubClass.BindOneCorpList2("document.all.Corp",strCorp));
else{
out.print(PubClass.BindAllCorpList2("document.all.Corp"));
}
%>
<%
out.println("<script>document.all.Corp.value='"+strCorp+"'</script>");
%>
<%
//(2)…………………………………………………..
String sList="";
sList+="<script>document.all.Corp.value='"+PubClass.getString(strCorp)+"';</script>"; sList+="<script>document.all.Depart.value='"+PubClass.getString(strDepart)+"';</script>";
//sLeaderList+="<script>document.all.Chu.value='"+PubClass.getString(strChu)+"';</script>";
sList+="<script>document.all.UserName.value='"+PubClass.getString(strUserName)+"';</script>";
%>
<%=sList%>
//(3)…………………………………………………..
<input type="hidden" name="HiddenKeyDepart" value="<%=strDepart%>" >
<input type="hidden" name="HiddenKeyChu" value="<%=strChu%>" >
<input type="hidden" name="HiddenChuName" value="<%=strChuName%>" >
//(4)…………………………………………………..
<script>
aa=document.createElement('OPTION');
aa.text=document.all.HiddenChuName.value;
aa.value=document.all.HiddenKeyChu.value;
document.all.Chu.add(aa,-1); </script>
</form>
</body>
</html>
SelectCropDepartServlet2.java文件如下:
/**
* 从sys04_Machine表中取数据进行二级下拉菜单(公司,部门)及关联的servlet类
* @author 邓浩
*/
public class SelectCropDepartServlet2 extends HttpServlet {
public SelectCropDepartServlet2() {
super();
}
public void destroy() {
super.destroy(); }
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
String targetId = request.getParameter("id").toString();
//System.out.println("targetId:"+targetId);
String targetState = request.getParameter("state").toString();
//System.out.println("targetState:"+targetState);
String targetKeyDepart = request.getParameter("keyDepart").toString();
//System.out.println("targetKeyDepart:"+targetKeyDepart);
//String targetKeyChu = request.getParameter("keyChu").toString();
//System.out.println("targetKeyChu:"+targetKeyChu);
String targetFlag = request.getParameter("flag").toString();
String xml_start ="<selects>";
String xml_end = "</selects>";
String xml = "";
String Pselect="Pselect";
try{
Conn conn=new Conn ();
DataTable dt=new DataTable();
DataTable dtDepartName=new DataTable();
String Sql="select * from sys04_Machine where ParentID=0 and cropid="+targetId;
//System.out.println("Sql:"+Sql);
if(targetKeyDepart.equals("")==false && targetKeyDepart.equals("Pselect")==false){
String SqlDepartName="select * from sys04_Machine where MachID="+targetKeyDepart;
//System.out.println("SqlMachName:"+SqlDepartName);
conn.querySql(SqlDepartName,dtDepartName);
}
int i=0;
if(targetFlag.equals("0")==true ){//如果Onchange时,将不判断
targetKeyDepart="Pselect";
}
if (conn.querySql(Sql,dt)){
if(dt.getRowCount()==0){
//xml+= "<select><value>Pselect</value><text>无</text></select>" ;
}
else if(targetState.equals("all")==true ){
if( targetKeyDepart.equals("")==true || targetFlag.equals("0")==true||targetKeyDepart.equals("Pselect")==true){
xml+= "<select><value>"+Pselect+"</value><text>全部</text></select>" ;
//System.out.println("xml_1"+xml);
}
else if(targetFlag.equals("1")==true ){
//if(targetFlag.equals("1")==true){
xml+= "<select><value>"+targetKeyDepart+"</value><text>"+dtDepartName.getItemForName(0,"MachName").toString()+"</text></select>" ;
//System.out.println("xml_2"+xml);
}
}
else if(targetState.equals("select")==true){
xml+= "<select><value>"+Pselect+"</value><text>请选择</text></select>" ;
}
while (i<dt.getRowCount()){
if( dt.getItemForName(i,"MachID").toString().equals( targetKeyDepart)==false ) //防止部门显示的下拉框显示重复值(主要是对查询后出现的问题)
xml+= "<select><value>"+dt.getItemForName(i,"MachID").toString()+"</value><text>"+dt.getItemForName(i,"MachName").toString()+"</text></select>";
i=i+1;
}
}
//System.out.println("i:"+i);
if( targetFlag.equals("1")==true && targetKeyDepart.equals("Pselect")==false &&targetId.equals("")==false){ //主要解决查询后丢失"全部"的问题
if( targetFlag.equals("1")==true && targetKeyDepart.equals("")==false &&targetId.equals("")==false) //主要解决分公司登陆后"全部"重复的问题
xml+= "<select><value>"+Pselect+"</value><text>全部</text></select>" ;
}
}
String last_xml = xml_start + xml + xml_end;
//System.out.println("last_xml:"+last_xml);
// last_xml = new String(last_xml.getBytes("UTF-8"), "GB2312");
response.getWriter().write(last_xml);
}// try
catch (Exception e){
System.out.print(e.getMessage());
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
doGet(request,response);
}
public void init() throws ServletException {
}
}
其对应的SelectDepartChuServlet.java文件如下:
/**
* 从sys04_Machine表中取数据进行二级下拉菜单(部门,处)及关联的servlet类
* @author 邓浩
*
*/
public class SelectDepartChuServlet extends HttpServlet {
public SelectDepartChuServlet() {
super();
}
public void destroy() {
super.destroy(); }
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
String targetId = request.getParameter("id").toString();
//System.out.println("targetId:"+targetId);
String targetState = request.getParameter("state").toString();
//System.out.println("targetState:"+targetState);
//String targetKey = request.getParameter("keyChu").toString();
//System.out.println("targetKey2:"+targetKey);
String xml_start ="<selects>";
String xml_end = "</selects>";
String xml = "";
try{
Conn conn=new Conn ();
DataTable dt=new DataTable();
String Sql="select * from sys04_Machine where ParentID="+targetId;
System.out.println("Sql:"+Sql);
/**
* DataTable dtMachName=new DataTable();
String SqlMachName="select * from sys04_Machine where MachID="+targetKey;
System.out.println("SqlMachName2:"+SqlMachName);
conn.querySql(SqlMachName,dtMachName);
if(targetKey.equals("")==false){
xml+= "<select><value>"+targetKey+"</value><text>"+dtMachName.getItemForName(0,"MachName").toString()+"</text></select>" ;
System.out.println("xml3"+xml);
}
*/
int i=0;
if (conn.querySql(Sql,dt)){
if(dt.getRowCount()==0){
xml+= "<select><value>Pselect</value><text>无</text></select>" ;
//System.out.println("xml1"+xml);
}
else if(targetState.equals("all")==true){
xml+= "<select><value>Pselect</value><text>全部</text></select>" ;
//System.out.println("xml2"+xml);
}
else if(targetState.equals("select")==true){
xml+= "<select><value>Pselect</value><text>请选择</text></select>" ;
}
while (i<dt.getRowCount()){
xml+= "<select><value>"+dt.getItemForName(i,"MachID").toString()+"</value><text>"+dt.getItemForName(i,"MachName").toString()+"</text></select>";
i=i+1;
}
}
String last_xml = xml_start + xml + xml_end;
//System.out.println("last_xml:"+last_xml);
// last_xml = new String(last_xml.getBytes("UTF-8"), "GB2312");
response.getWriter().write(last_xml);
}// try
catch (Exception e){
System.out.print(e.getMessage());
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
doGet(request,response);
}
public void init() throws ServletException {
}
}
流程如下:
<1>当首页进入时
读取(1)处加载公司下来列表,并通过<body οnlοad="loads(1)"> 文件加载部门的值
<2>当选择公司时通过<td width="110" align="left"><select style="width:100 " name="Corp" id="Corp" onChange="Change_Select(0)" ></select></td>
的onChange加载部门的值
<3>当选择部门时通过<td width="110" align="left"><select style="width:100 " name="Corp" id="Corp" onChange="Change_Select2()" ></select></td>
的onChange加载处室的值
<4>当点击查询时,
公司值在下拉框中的显示是通过加载(1)中的:
<%out.println("<script>document.all.Corp.value='"+strCorp+"'</script>");将公司值保存在下来列表框中
部门值在下拉框中的显示是通过加载并通过<body onload="loads(1)"> 文件加载部门的值:
而处室的值却是通过(4)写死到页面中:
当然,其Servelt类的内部处理流程也异常复杂,不过我就不详细介绍了,大家套用时只需要该需要的参数就可以了.
2006-9-8