ajax级联菜单的实现

DoubleComboXML.java

  1. package mypack;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.PrintWriter;
  7. import java.sql.*;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. public class DoubleComboXML extends HttpServlet {
  13.     public DoubleComboXML() {
  14.         super();
  15.         System.out.println("servlet:DoubleComboXML");
  16.     }
  17.     public void destroy() {
  18.         super.destroy(); // Just puts "destroy" string in log
  19.         // Put your code here
  20.     }
  21.     private void process(HttpServletRequest request,
  22.             HttpServletResponse response) throws ServletException, IOException {
  23.         response.setContentType("text/xml;charset=utf-8");
  24.         PrintWriter out = response.getWriter();
  25.         String strQuery = request.getParameter("q");
  26.         String strForm = request.getParameter("f");
  27.         String strElem = request.getParameter("e");
  28.         String strSql = "select * from Territories where regionid=" + strQuery;
  29.         Connection connection = null;
  30.         PreparedStatement pstm = null;
  31.         ResultSet rs = null;
  32.         try {
  33.             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
  34.             connection = DriverManager
  35.                     .getConnection(
  36.                             "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ajax",
  37.                             "sa""sa");
  38.             pstm = connection
  39.                     .prepareStatement("select * from Territories where regionid=" + strQuery);
  40.            
  41.             rs = pstm.executeQuery();
  42.         } catch (ClassNotFoundException e) {
  43.             // TODO Auto-generated catch block
  44.             e.printStackTrace();
  45.         } catch (Exception e) {
  46.             // TODO Auto-generated catch block
  47.             e.printStackTrace();
  48.         }
  49.         StringBuffer strXML = new StringBuffer();
  50.         strXML.append("<?xml version=/"1.0/" ?>");
  51.         strXML.append("<selectChoice>");
  52.         strXML.append("<selectElement>");
  53.         strXML.append("<formName>" + strForm + "</formName>");
  54.         strXML.append("<formElem>" + strElem + "</formElem>");
  55.         strXML.append("</selectElement>");
  56.         try {
  57.             if (!rs.wasNull()) {
  58.                 strXML.append("<entry>");
  59.                 strXML.append("<optionText>Select A Territory</optionText>");
  60.                 strXML.append("<optionValue>-1</optionValue>");
  61.                 strXML.append("</entry>");
  62.                 while (rs.next()) {
  63.                     strXML.append("<entry>");
  64.                     strXML.append("<optionText>" + rs.getString("TerritoryDc") + "</optionText>");
  65.                     strXML.append("<optionValue>" + rs.getInt("TerritoryID") + "</optionValue>");
  66.                     strXML.append("</entry>");
  67.                 }
  68.             }
  69.         } catch (SQLException e) {
  70.             // TODO Auto-generated catch block
  71.             e.printStackTrace();
  72.         }
  73.         strXML.append("</selectChoice>");
  74.         out.write(strXML.toString());
  75.         out.close();
  76.     }
  77.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  78.             throws ServletException, IOException {
  79.         process(request, response);
  80.     }
  81.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  82.             throws ServletException, IOException {
  83.         process(request, response);
  84.     }
  85.     public void init() throws ServletException {
  86.         // Put your code here
  87.     }
  88. }

net.js

  1. /**//*
  2. url-loading object and a request queue built on top of it
  3. */
  4. /**//* namespacing object */
  5. var net=new Object();
  6. net.READY_STATE_UNINITIALIZED=0;
  7. net.READY_STATE_LOADING=1;
  8. net.READY_STATE_LOADED=2;
  9. net.READY_STATE_INTERACTIVE=3;
  10. net.READY_STATE_COMPLETE=4;
  11. /**//*--- content loader object for cross-browser requests ---*/
  12. net.ContentLoader=function(url,onload,onerror,method,params,contentType){
  13.   this.req=null;
  14.   this.οnlοad=onload;
  15.   this.οnerrοr=(onerror) ? onerror : this.defaultError;
  16.   this.loadXMLDoc(url,method,params,contentType);
  17. }
  18. net.ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){
  19.   if (!method){
  20.     method="GET";
  21.   }
  22.   if (!contentType && method=="POST"){
  23.     contentType='application/x-www-form-urlencoded';
  24.   }
  25.   if (window.XMLHttpRequest){
  26.     this.req=new XMLHttpRequest();
  27.   } else if (window.ActiveXObject){
  28.     this.req=new ActiveXObject("Microsoft.XMLHTTP");
  29.   }
  30.   if (this.req){
  31.     try{
  32.       var loader=this;
  33.       this.req.onreadystatechange=function(){
  34.         net.ContentLoader.onReadyState.call(loader);
  35.       }
  36.       this.req.open(method,url,true);
  37.       if (contentType){
  38.         this.req.setRequestHeader('Content-Type', contentType);
  39.       }
  40.       this.req.send(params);
  41.     }catch (err){
  42.       this.onerror.call(this);
  43.     }
  44.   }
  45. }
  46. net.ContentLoader.onReadyState=function(){
  47.   var req=this.req;
  48.   var ready=req.readyState;
  49.   if (ready==net.READY_STATE_COMPLETE){
  50.     var httpStatus=req.status;
  51.     if (httpStatus==200 || httpStatus==0){
  52.       this.onload.call(this);
  53.     }else{
  54.       this.onerror.call(this);
  55.     }
  56.   }
  57. }
  58. net.ContentLoader.prototype.defaultError=function(){
  59.   alert("error fetching data!"
  60.     +"/n/nreadyState:"+this.req.readyState
  61.     +"/nstatus: "+this.req.status
  62.     +"/nheaders: "+this.req.getAllResponseHeaders());
  63. }

MyJsp.jsp

 

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3.   <head>
  4.     <title>Double Combo - Ajax In Action</title>
  5.     <script type="text/javascript" src="js/net.js"></script>
  6.     <script type="text/javascript">         
  7.       function FillTerritory(oElem,oTarget){                           
  8.         var strValue = oElem.options[                                  
  9.                      oElem.selectedIndex].value;                       
  10.         var url = 'DoubleComboXML';                               
  11.         var strParams = 'q=' + strValue +                              
  12.           "f=" + oTarget.form.name +                                   
  13.           "e=" + oTarget.name;                                        
  14.         var loader1 = new                                              
  15.         net.ContentLoader(url,FillDropDown,null,                       
  16.                     "POST",strParams);                           
  17.       }
  18.       function FillDropDown(){
  19.         var xmlDoc = this.req.responseXML.documentElement;              
  20.         var xSel = xmlDoc.                                             
  21.            getElementsByTagName('selectElement')[0];                   
  22.         var strFName = xSel.                                           
  23.            childNodes[0].firstChild.nodeValue;                         
  24.         var strEName = xSel.                                           
  25.            childNodes[1].firstChild.nodeValue;                         
  26.             
  27.         var objDDL = document.forms[strFName].                         
  28.            elements[strEName];                                         
  29.         objDDL.options.length = 0;                                     
  30.             
  31.         var xRows = xmlDoc.                                            
  32.           getElementsByTagName('entry');                               
  33.         for(i=0;i<xRows.length;i++){                                   
  34.           var theText = xRows[i].                                      
  35.               childNodes[0].firstChild.nodeValue;                      
  36.           var theValue = xRows[i].                                     
  37.               childNodes[1].firstChild.nodeValue;                      
  38.           var option = new Option(theText,                             
  39.                             theValue);                           
  40.           objDDL.options.add(option,                                   
  41.                           objDDL.options.length);                      
  42.         }                                                              
  43.       }           
  44.     </script>
  45.   </head>
  46.   <body>
  47.     <form name="Form1" ID="Form1">
  48.       <select name="ddlRegion" onchange="FillTerritory(this,document.Form1.ddlTerritory)" ID="Select1">
  49.         <option value="-1">Pick A Region</option>
  50.         <option value="1">Eastern</option>
  51.         <option value="2">Western</option>
  52.         <option value="3">Northern</option>
  53.         <option value="4">Southern</option>
  54.       </select>
  55.       <select name="ddlTerritory" ID="Select2"></select>
  56.     </form>
  57.   </body>
  58. </html>

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.   <servlet>
  8.     <description>This is the description of my J2EE component</description>
  9.     <display-name>This is the display name of my J2EE component</display-name>
  10.     <servlet-name>DoubleComboXML</servlet-name>
  11.     <servlet-class>mypack.DoubleComboXML</servlet-class>
  12.   </servlet>
  13.   <servlet-mapping>
  14.     <servlet-name>DoubleComboXML</servlet-name>
  15.     <url-pattern>/DoubleComboXML</url-pattern>
  16.   </servlet-mapping>
  17. </web-app>

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值