`
duzn
  • 浏览: 23912 次
社区版块
存档分类
最新评论

ajax实现菜单级联组件设计

    博客分类:
  • ajax
阅读更多

今天抽时间写了一个关于级联菜单demo 可以实现多级级联,现已经打包供大家下载学习,自己写了一个简单的组件用来处理下拉列表框及联问题,在解析js脚本中的 parseXml(xmlDom)含糊还存在一些不足,处理同名的下拉列表框(根据生成的xml文件的index属性来处理),我会尽快完善,并会增加其他的功能,

希望这个设计对大家有所帮助,如果大家有好的想法,就请指正,谢谢!

java 代码
  1. 源码1:   
  2.   
  3. package duzn.soa;   
  4.   
  5. import java.io.IOException;   
  6. import java.io.PrintWriter;   
  7.   
  8. import javax.servlet.http.HttpServletResponse;   
  9.   
  10. public class SOAData {   
  11.   
  12.     private StringBuffer sb = new StringBuffer();   
  13.     private String objName = "";   
  14.        
  15.     public String getXmlDoc(){   
  16.         return sb.toString();   
  17.     }   
  18.        
  19.     public void beginSelectOptions(String objName){   
  20.         this.objName = objName;   
  21.         sb.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");   
  22.         sb.append("<root>");   
  23.         sb.append("<" + objName + " type=\"select\">");   
  24.     }   
  25.        
  26.     public void beginSelectOptions(String objName, int index){   
  27.         this.objName = objName;   
  28.         sb.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");   
  29.         sb.append("<root>" + "\n");   
  30.         sb.append("<" + objName + " type=\"select\" index=\"" + index + "\">");   
  31.     }   
  32.        
  33.     public void addSelectOption(String objContent, String objValue){   
  34.         sb.append("<option value=\"" + objValue + "\">");   
  35.         sb.append(objContent + "</option>");   
  36.     }   
  37.        
  38.     public void endSelectOptions(){   
  39.         sb.append("</" + this.objName + ">");   
  40.         sb.append("</root>");   
  41.     }   
  42.        
  43.     public void soaWrite(HttpServletResponse response){   
  44.         //设置输出的信息的格式及字符集   
  45.         response.setContentType("text/xml; charset=GB2312");   
  46.         response.setHeader("Cache-Control","no-cache");   
  47.         try {   
  48.             PrintWriter pw = response.getWriter();   
  49.             pw.println(getXmlDoc());   
  50.             pw.flush();   
  51.             pw.close();   
  52.         } catch (IOException e) {   
  53.             e.printStackTrace();   
  54.         }   
  55.     }   
  56.        
  57.     /*public static void main(String[] args){  
  58.         SOAData soaData = new SOAData();  
  59.         soaData.beginSelectOptions("dept");  
  60.         soaData.addSelectOption("gdys", "1");  
  61.         soaData.addSelectOption("dzgc", "2");  
  62.         soaData.addSelectOption("jjgl", "3");  
  63.         soaData.endSelectOptions();  
  64.         System.out.println(soaData.getXmlDoc());  
  65.     }*/  
  66. }   
java 代码
  1. package duzn.soa;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import javax.servlet.ServletException;   
  6. import javax.servlet.http.HttpServlet;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9.   
  10. public class SelectServlet extends HttpServlet{   
  11.   
  12.     @Override  
  13.     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
  14.         String fieldName = request.getParameter("fieldName");   
  15.         int branchId = 0;   
  16.         try {   
  17.             branchId = Integer.parseInt(request.getParameter("branchId"));   
  18.         } catch (NumberFormatException e) {   
  19.             branchId = 1;   
  20.             System.out.println(e.getMessage());   
  21.         }   
  22.            
  23.         SOAData soaData = new SOAData();   
  24.         soaData.beginSelectOptions(fieldName);   
  25.         soaData.addSelectOption("--请选择--""0");   
  26.         //在此根据branchId操作数据库查询数据   
  27.         if(branchId == 1){   
  28.             soaData.addSelectOption("办公室""1");   
  29.             soaData.addSelectOption("财务处""2");   
  30.             soaData.addSelectOption("党工办""3");   
  31.         }else if(branchId == 2){   
  32.             soaData.addSelectOption("计算机系""1");   
  33.             soaData.addSelectOption("经管系""2");   
  34.             soaData.addSelectOption("电子系""3");   
  35.         }   
  36.            
  37.         soaData.endSelectOptions();   
  38.         System.out.println(soaData.getXmlDoc());   
  39.         soaData.soaWrite(response);   
  40.     }   
  41.   
  42.        
  43. }  
xml 代码 web.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"    
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"    
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.          
  8.   <servlet>  
  9.       <servlet-name>SelectServlet</servlet-name>  
  10.       <servlet-class>duzn.soa.SelectServlet</servlet-class>  
  11.   </servlet>  
  12.        
  13.   <servlet-mapping>  
  14.     <servlet-name>SelectServlet</servlet-name>  
  15.     <url-pattern>/select.do</url-pattern>  
  16.   </servlet-mapping>  
  17. </web-app>  
js 代码 xmlhttp.js
  1. var xmlreq = false//创建一个XMLHttpRequest对象   
  2.            
  3. function newXMLHttpRequest() {   
  4.       if (window.XMLHttpRequest) {   
  5.             xmlreq = new XMLHttpRequest();  // 在非Microsoft浏览器中创建XMLHttpRequest对象   
  6.       } else if (window.ActiveXObject) {   
  7.         try {   //通过MS ActiveX创建XMLHttpRequest   
  8.             xmlreq = new ActiveXObject("Msxml2.XMLHTTP");   // 尝试按新版InternetExplorer方法创建   
  9.         } catch (e1) {   
  10.             try {   // 创建请求的ActiveX对象失败   
  11.                 xmlreq = new ActiveXObject("Microsoft.XMLHTTP");    // 尝试按老版InternetExplorer方法创建   
  12.             } catch (e2) {   
  13.                  // 不能通过ActiveX创建XMLHttpRequest   
  14.             }   
  15.         }   
  16.       }   
  17. }   
  18.            
  19.   
  20. //发送请求函数-->业务流程   
  21. function sendXml(url, param){   
  22.     if(url.length == 0){   
  23.         return;   
  24.     }else{   
  25.         if( param == null || param == "undefined" ){   
  26.             param = "";   
  27.         }   
  28.   
  29.         newXMLHttpRequest();   
  30.         try{   
  31.             xmlreq.onreadystatechange=proce;    //指定响应的函数 proce()   
  32.             xmlreq.open("GET", url, true);      //以GET方式传输数据,打开url,以异步方式   
  33.             xmlreq.setRequestHeader("Content-Type""application/x-www-form-urlencoded");   
  34.             xmlreq.send(param); //发送请求   
  35.         }catch(exception){   
  36.             alert("您要访问的资源不存在!");   
  37.         }   
  38.     }   
  39. }   
  40.   
  41. //回调函数   
  42. function proce(){   
  43.     if(xmlreq.readyState == 4){     //对象状态   
  44.         if(xmlreq.status == 200 || xmlreq.status == 0){ //信息已成功返回,开始处理信息;   
  45.             //alert(xmlreq.responseText);   
  46.             parseXml(xmlreq.responseXML);   
  47.         }else{   
  48.             window.alert("所请求的页面有异常");   
  49.             alert(xmlreq.statusText);   
  50.         }   
  51.     }   
  52. }   
  53.            
  54. //解析xml文档   
  55. function parseXml(xmlDom){   
  56.     var rootNode = xmlDom.documentElement;   
  57.     if(rootNode == null){   
  58.         return false;   
  59.     }else{   
  60.         for(var node = rootNode.firstChild; node != null;  node=node.nextSibling){   
  61.             var objName = node.nodeName;   
  62.             var type = node.getAttribute("type");   
  63.             if(type == "select"){   
  64.                 clearSelectOption(objName);   
  65.                 var opts = node.getElementsByTagName("option");   
  66.                 for(var i=0; i<opts.length; i++){   
  67.                     var optName = opts[i].firstChild.data;   
  68.                     var optValue = opts[i].getAttribute("value");   
  69.                     addSelectOption(objName, optValue, optName);   
  70.                 }   
  71.             }   
  72.         }   
  73.     }   
  74.                
  75. }   
  76.   
  77. //往下拉列表框中写数据   
  78. function addSelectOption(objName, optValue, optName){   
  79.     var elmtObj = document.getElementById(objName);   
  80.     elmtObj.options[elmtObj.length] = new Option(optName, optValue);   
  81. }   
  82.   
  83. //清空下拉列表框   
  84. function clearSelectOption(objName){   
  85.     var elmtObj = document.getElementById(objName);   
  86.   
  87.     while(elmtObj.options.length > 0){   
  88.         elmtObj.remove(0);   
  89.     }   
  90.        
  91.     //elmtObj.options.length = 0;   
  92. }   
  93.   
  94. function sendText(url, param){   
  95.     if(url.length == 0){   
  96.         return;   
  97.     }else{   
  98.         if( param == null || param == "undefined" ){   
  99.             param = "";   
  100.         }   
  101.   
  102.         newXMLHttpRequest();   
  103.         try{   
  104.             xmlreq.onreadystatechange=getText;  //指定响应的函数 getText()   
  105.             xmlreq.open("GET", url, true);      //以GET方式传输数据,打开url,以异步方式   
  106.             xmlreq.setRequestHeader("Content-Type""application/x-www-form-urlencoded");   
  107.             xmlreq.send(param); //发送请求   
  108.         }catch(exception){   
  109.             alert("您要访问的资源不存在!");   
  110.         }   
  111.     }   
  112. }   
  113.   
  114. function getText(){   
  115.     if(xmlreq.readyState == 4){     //对象状态   
  116.         if(xmlreq.status == 200 || xmlreq.status == 0){ //信息已成功返回,开始处理信息;   
  117.             alert(xmlreq.responseText);   
  118.         }else{   
  119.             window.alert("所请求的页面有异常");   
  120.             alert(xmlreq.statusText);   
  121.         }   
  122.     }   
  123. }  
jsp代码 index.jsp
  1. <%@ page contentType="text/html; charset=GB2312" pageEncoding="GB2312"%>   
  2. <HTML>   
  3. <HEAD>   
  4. <TITLE> New Document </TITLE>   
  5.   
  6. <script lang="javascript" src="xmlhttp.js"></script>   
  7. <script>   
  8.     function branchChange(branchId){   
  9.         sendXml('select.do?fieldName=dept&branchId='+branchId, '');   
  10.     }   
  11. </script>   
  12. </HEAD>   
  13.   
  14. <BODY>   
  15.     <div id="nn"></div>   
  16.     <form name="form1" method="post" action="">   
  17.         机构   
  18.         <select name="branch" onchange="branchChange(this.value)">   
  19.             <option value='0'>--请选择--</option>   
  20.             <option value='1'>行政机关</option>   
  21.             <option value='2'>教学管理</option>   
  22.         </select>   
  23.         &nbsp;部门   
  24.         <select name="dept"><option value="0">--请选择--</option></select>   
  25. </BODY>   
  26. </HTML>   
  • WebTest.rar (6.4 KB)
  • 描述: 程序源码,解压后放在tomcat的webapps目录下可直接运行
  • 下载次数: 710
分享到:
评论
3 楼 salon 2007-04-25  
firefox下有问题啊
2 楼 Ghosts 2007-04-18  
uyiyiuyi
1 楼 liufeng 2007-04-04  
今天终于知道怎么生成XML文件了。也知道了怎么解析它的。呵呵。谢谢楼主

相关推荐

    jquery无限级联下拉菜单简单实例演示

    本文实例讲述了jquery无限级联下拉菜单代码以及jquery无限级联下拉菜单实现思路。分享给大家供大家参考。具体如下: 最终效果图: 因为是级联,所以数据必须是树型结构的,这里的测试数据如下: 看下效果图: 1、...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    WebSitetestdojo 使用dojo组件实现卷帘效果的div隐藏 第16章(/C16/) 留言板源代码 所有留言板实例的源代码 数据库备份 留言板数据所需要的数据库 第17章(/ch17) 程序描述:本章介绍开发AJAX...

    Ajax的CascadingDropDown的使用

    学习使用AjaxControlToolkit中的CascadingDropDown组件。CascadingDropDown主要是控制数个普通的DropDownList控件,并使它们产生无刷新的...学会CascadingDropDown组件将会大大简化我们开发无刷新级联下拉菜单的流程。

    JavaScript全国城市三级联动代码

    摘要:脚本资源,Ajax/JavaScript,城市联动菜单,全国城市菜单 Js全国城市三级联动代码,网页常用的组件,不过我感觉这一个城市级联菜单并没有使用Ajax异步加载技术,完全是用传统的JS实现的,全国城市信息写在area.js...

    python入门到高级全栈工程师培训 第3期 附课件代码

    09 jquery练习之左侧菜单 第44章 01 jquery属性操作之html,text,val方法 02 jquery循环方法和attr,prop方法 03 jquery模态对话框与clone的应用 04 jqueryCSS操作之offsets,position以及scrolltop 05 jquery事件...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    后台权限管理系统

    这个权限系统demo没有MVC、没有ORM、数据库表都没设外键关系、...界面上的所有操作基本都是jquery发ajax请求ashx处理,ashx处理后输出json前台接收处理并配合easyui的组件响应给用户。基本没什么门槛,比较适合初学者。

    老男孩第三期Python全栈开发视频教程 零基础系统学习Python开发视频+资料

    ├─(25) 09 python s3 day43 jquery练习之左侧菜单.avi ├─(26) day43课件代码.rar (8)\\python全栈day41-50\\python全栈s3 day44;目录中文件数:10个 ├─(27) 01 python s3 day44 jquery属性操作之html,text,val...

    Java学习笔记-个人整理的

    {14.2}XML的设计}{205}{section.14.2} {14.3}DTD/Schema}{205}{section.14.3} {14.3.1}SAX应用}{206}{subsection.14.3.1} {14.4}dom4j}{207}{section.14.4} {14.5}XPath}{210}{section.14.5} {14.6}apache....

Global site tag (gtag.js) - Google Analytics