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("");
  51.         strXML.append("");
  52.         strXML.append("");
  53.         strXML.append("" + strForm + "");
  54.         strXML.append("" + strElem + "");
  55.         strXML.append("");
  56.         try {
  57.             if (!rs.wasNull()) {
  58.                 strXML.append("");
  59.                 strXML.append("Select A Territory");
  60.                 strXML.append("-1");
  61.                 strXML.append("");
  62.                 while (rs.next()) {
  63.                     strXML.append("");
  64.                     strXML.append("" + rs.getString("TerritoryDc") + "");
  65.                     strXML.append("" + rs.getInt("TerritoryID") + "");
  66.                     strXML.append("");
  67.                 }
  68.             }
  69.         } catch (SQLException e) {
  70.             // TODO Auto-generated catch block
  71.             e.printStackTrace();
  72.         }
  73.         strXML.append("");
  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. <html>
  2.   <head>
  3.     <title>Double Combo - Ajax In Actiontitle>
  4.     <script type="text/javascript" src="js/net.js">script>
  5.     <script type="text/javascript">         
  6.       function FillTerritory(oElem,oTarget){                           
  7.         var strValue = oElem.options[                                  
  8.                      oElem.selectedIndex].value;                       
  9.         var url = 'DoubleComboXML';                               
  10.         var strParams = 'q=' + strValue +                              
  11.           "f=" + oTarget.form.name +                                   
  12.           "e=" + oTarget.name;                                        
  13.         var loader1 = new                                              
  14.         net.ContentLoader(url,FillDropDown,null,                       
  15.                     "POST",strParams);                           
  16.       }
  17.       function FillDropDown(){
  18.         var xmlDoc = this.req.responseXML.documentElement;              
  19.         var xSel = xmlDoc.                                             
  20.            getElementsByTagName('selectElement')[0];                   
  21.         var strFName = xSel.                                           
  22.            childNodes[0].firstChild.nodeValue;                         
  23.         var strEName = xSel.                                           
  24.            childNodes[1].firstChild.nodeValue;                         
  25.             
  26.         var objDDL = document.forms[strFName].                         
  27.            elements[strEName];                                         
  28.         objDDL.options.length = 0;                                     
  29.             
  30.         var xRows = xmlDoc.                                            
  31.           getElementsByTagName('entry');                               
  32.         for(i=0;i<xRows.length;i++){                                   
  33.           var theText = xRows[i].                                      
  34.               childNodes[0].firstChild.nodeValue;                      
  35.           var theValue = xRows[i].                                     
  36.               childNodes[1].firstChild.nodeValue;                      
  37.           var option = new Option(theText,                             
  38.                             theValue);                           
  39.           objDDL.options.add(option,                                   
  40.                           objDDL.options.length);                      
  41.         }                                                              
  42.       }           
  43.     script>
  44.   head>
  45.   <body>
  46.     <form name="Form1" ID="Form1">
  47.       <select name="ddlRegion" onchange="FillTerritory(this,document.Form1.ddlTerritory)" ID="Select1">
  48.         <option value="-1">Pick A Regionoption>
  49.         <option value="1">Easternoption>
  50.         <option value="2">Westernoption>
  51.         <option value="3">Northernoption>
  52.         <option value="4">Southernoption>
  53.       select>
  54.       <select name="ddlTerritory" ID="Select2">select>
  55.     form>
  56.   body>
  57. 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 componentdescription>
  9.     <display-name>This is the display name of my J2EE componentdisplay-name>
  10.     <servlet-name>DoubleComboXMLservlet-name>
  11.     <servlet-class>mypack.DoubleComboXMLservlet-class>
  12.   servlet>
  13.   <servlet-mapping>
  14.     <servlet-name>DoubleComboXMLservlet-name>
  15.     <url-pattern>/DoubleComboXMLurl-pattern>
  16.   servlet-mapping>
  17. web-app>

 

 

 

 

你可能感兴趣的:(javascript)