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

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文件了。也知道了怎么解析它的。呵呵。谢谢楼主

相关推荐

    java实现Ajax级联菜单

    在本案例中,我们关注的是如何使用Java和Ajax技术来实现一个二级联动的菜单。Ajax,即Asynchronous JavaScript and XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。Java则是后端编程语言,...

    AJAX实例的级联菜单

    在实现AJAX级联菜单时,主要步骤如下: 1. 创建HTML结构,包括两个或多个级联的下拉菜单。 2. 使用JavaScript(如jQuery或其他库)监听第一个菜单的选择事件。 3. 当选择改变时,发送AJAX请求到服务器,传递选定的主...

    ajax实现下拉列表级联

    在本文中,我们将深入探讨如何使用Ajax技术来实现下拉列表的级联效果,这是一个常见的交互功能,特别是在数据录入和筛选场景中。我们将基于EJB(Enterprise JavaBeans)技术连接数据库,以动态加载和更新下拉列表...

    运用ajax+jsp+servlet实现三级级联菜单

    在这个案例中,我们探讨如何运用AJAX、JSP和Servlet技术来实现一个三级级联菜单。 **AJAX (Asynchronous JavaScript and XML)** 是一种在不刷新整个网页的情况下,与服务器交换数据并更新部分网页的技术。它通过...

    ajax三级级联无刷新 和批量上传文件

    "ajax三级级联无刷新"是指在网页上使用Ajax技术实现省市区三级联动的效果,用户在选择一级区域(如省份)时,无需刷新整个页面,二级区域(如城市)会自动更新;接着选择二级区域,三级区域(如区县)也会随之动态...

    struts+hibernate+ajax级联菜单

    在"struts+hibernate+ajax级联菜单"项目中,MyProject可能是一个完整的Java Web工程,包含以下主要组件: 1. `struts.xml`:Struts配置文件,定义了Action类及其对应的URL路径和结果页面。 2. `hibernate.cfg.xml`:...

    动态树形结构的级联菜单

    常见的JavaScript库如jQuery、Vue.js、React.js等都有相应的组件或插件支持级联菜单的创建。 5. **数据绑定**:级联菜单的数据通常来自服务器,可以通过Ajax或Fetch API进行异步获取。数据结构一般包含节点ID、父...

    H5城市级联插件

    【H5城市级联插件】是一种基于HTML5技术实现的交互式用户界面组件,它主要用于在网页上展示城市选择的级联下拉菜单。这种插件在网站中广泛使用,尤其是在需要用户填写地址信息或者根据地理位置提供服务的场景下。它...

    jQuery+ajax实现无刷新级联菜单示例

    ### jQuery+ajax实现无刷新级联菜单示例知识点 #### 知识点一:无刷新级联菜单概念 无刷新级联菜单是一种常见的Web界面组件,主要用于地区选择、分类筛选等场景。它允许用户在一个下拉列表中选择一个选项后,另一个...

    实现级联效果

    在软件设计中,级联结构通常指的是组件之间的依赖关系,其中一个组件的状态或行为改变会影响其他组件。比如,在面向对象编程中,一个类的方法可能会调用另一个类的方法,形成一种链式调用,这种级联调用有助于代码...

    城市级联菜单

    6. **前端框架和库**:现代网页开发中,常常会用到前端框架或库,如jQuery、Vue.js、React.js等,它们提供了丰富的API和组件,可以简化城市级联菜单的开发过程。例如,Vue.js的`v-for`指令可以轻松实现数据的遍历...

    无限级级联菜单源码,asp.net,ajax

    在IT领域,尤其是在Web开发中,无限级级联菜单是一种常见的交互设计,它允许用户通过逐级下拉的方式来浏览和选择深层次的结构化数据。在本案例中,我们讨论的是一段实现这种功能的源码,它基于ASP.NET和AJAX技术栈。...

    jsp+json+mySql 实现二级级联下拉菜单

    在本文中,我们将深入探讨如何使用JSP、JSON和MySQL来实现一个二级级联下拉菜单。这个功能常用于网站的表单设计中,让用户能够从相关联的分类中选择选项,例如省份与城市的选择。 首先,让我们了解这三个技术的核心...

    asp.net级联菜单

    总的来说,使用JavaScript、ListBox和Control在ASP.NET中实现级联菜单需要结合客户端和服务器端的技术,通过JavaScript进行交互逻辑处理,利用ASP.NET控件展示菜单,同时通过AJAX技术实现数据的动态加载。...

    JQuery写的日期级联下拉菜单

    这里我们讨论的“JQuery写的日期级联下拉菜单”是一个利用jQuery库实现的交互式用户界面组件,允许用户通过三个连续的下拉列表分别选择年、月和日。这种设计使得用户能够快速、准确地输入日期,同时保持页面的简洁性...

    php框架thinkphp实现js(ajax)无限添加级联下拉框

    这个例子中的"php框架thinkphp实现js(ajax)无限添加级联下拉框"是关于如何利用ThinkPHP和JavaScript(AJAX)技术来创建一个动态的、可以无限级联的下拉菜单系统。下面我们将深入探讨这一主题。 1. **ThinkPHP框架...

    4级级联菜单JQUERY+JSON版

    在网页开发中,级联菜单(Cascading Menu)是一种常见的交互设计元素,它用于组织大量数据并提供层次化的导航体验。"4级级联菜单JQUERY+JSON版"是一个利用JavaScript库jQuery和数据格式JSON实现的多级联动菜单的示例...

    seam级联菜单例子

    级联菜单的实现可能涉及到`&lt;h:selectOneMenu&gt;`或`&lt;p:selectOneMenu&gt;`标签,其中`p:`是PrimeFaces组件库的前缀,而`h:`则是JSF的标准组件库前缀。这些组件可以配置成响应用户的选中事件,通过Ajax请求获取下一级菜单...

    .net jquery无刷新级联菜单

    总之,".net jquery无刷新级联菜单"是一个实用的前端组件,它结合了.NET的后端处理能力和jQuery的前端交互,实现了高效且流畅的三级菜单选择。对于初学者来说,这是一个很好的学习案例,可以帮助他们理解前后端交互...

    select级联二级菜单

    在网页开发中,"select级联二级菜单"是一种常见的交互设计,主要用于呈现具有层次结构的数据。这种设计使得用户可以通过选择一级菜单项来显示相应的二级菜单,进而进行更精确的选择。在给定的资源中,我们可以推测这...

Global site tag (gtag.js) - Google Analytics