`
jiaguwen123
  • 浏览: 411395 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

ajax实现三级联动菜单

    博客分类:
  • AJAX
阅读更多

插入数据库语句


create table COUNTRY
(
  NAME VARCHAR2(100) not null,
  TYPE NUMBER not null
)
;
alter table COUNTRY
  add constraint PRIMARY_KEY primary key (TYPE);


insert into COUNTRY (NAME, TYPE)
values ('中国', 1);
insert into COUNTRY (NAME, TYPE)
values ('美国', 2);
insert into COUNTRY (NAME, TYPE)
values ('日本', 3);

 

 

 


create table CITY
(
  NAME        VARCHAR2(100) not null,
  TYPE        NUMBER not null,
  COUNTRYTYPE NUMBER not null
)
;


insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('沈阳', 1, 1);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('大连', 2, 1);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('american_city1', 3, 2);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('american_city2', 4, 2);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('american_city3', 5, 2);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('japan_city1', 6, 3);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('japan_city2', 7, 3);


 

 


create table STREET
(
  NAME     VARCHAR2(100) not null,
  TYPE     NUMBER not null,
  CITYTYPE NUMBER not null
)
;


insert into STREET (NAME, TYPE, CITYTYPE)
values ('中街', 1, 1);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('太原街', 2, 1);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('大连street1', 3, 2);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('大连street2', 4, 2);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('大连street3', 5, 2);

 

新建servlet 类两个

 

package test.servlet;

import java.io.*;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SelectServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/xml;charset=gb2312");
  response.setHeader("Cache-Control", "no-cache");
  String targetId = request.getParameter("id").toString();

  String xml_start = "<selects>";
  String xml_end = "</selects>";
  String xml = "";
  List list1 = new ArrayList();
  List list2 = new ArrayList();

   String sql = "select * from city where countrytype='" + targetId + "'";
   ConnDB53 db=new ConnDB53();
   ResultSet rs=db.executeQuery(sql);
   try{
    while (rs.next()) {
     list1.add(rs.getString("name"));
     list2.add(rs.getString("type"));
    }
   }catch(Exception e){
    e.printStackTrace();
   }
   
  

  if (targetId.equalsIgnoreCase("0")) {
   xml = "<select><value>0</value><text>--请选择--</text></select>";
  } else {
   xml = "<select><value>0</value><text>--请选择--</text></select>";
   for (int i = 0; i < list1.size(); i++) {
    xml += "<select><value>" + list2.get(i) + "</value><text>"
      + list1.get(i) + "</text></select>";
   }

  }
  String last_xml = "<?xml version='1.0' encoding='GB2312'?>" + xml_start
    + xml + xml_end;
  response.getWriter().write(last_xml);

 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
 }

}

 

package test.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SelectServlet2 extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/xml;charset=gb2312");
  response.setHeader("Cache-Control", "no-cache");
  String targetId = request.getParameter("id").toString();
  String xml_start = "<selects>";
  String xml_end = "</selects>";
  String xml = "";
  List list1 = new ArrayList();
  List list2 = new ArrayList();

  String sql = "select * from street where citytype='"+ targetId + "'";
  ConnDB53 db=new ConnDB53();
  ResultSet rs=db.executeQuery(sql);
  try {
   
   while (rs.next()) {
    list1.add(rs.getString("name"));
    list2.add(rs.getString("type"));
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

  if (targetId.equalsIgnoreCase("0")) {
   xml = "<select><value>0</value><text>--请选择--</text></select>";
  } else {
   xml = "<select><value>0</value><text>--请选择--</text></select>";
   for (int i = 0; i < list1.size(); i++) {
    xml += "<select><value>" + list2.get(i) + "</value><text>"
      + list1.get(i) + "</text></select>";
   }

  }
  String last_xml = "<?xml version='1.0' encoding='GB2312'?>" + xml_start
    + xml + xml_end;
  response.getWriter().write(last_xml);

 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
 }

}

 

 

package test.servlet;

import java.sql.*;

public class ConnDB53 {
 Connection conn = null;
 Statement stmt = null;
 Statement stmt2 = null;
 ResultSet rs = null;
 String user = "maximo";
 String pass = "maximo53";
 String url = "jdbc:oracle:thin:@10.64.27.53:1521:PROD";

 
 public ConnDB53() {
  try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   conn = DriverManager.getConnection(url, user, pass);
  } catch (java.lang.ClassNotFoundException e) {
   System.err.println(e.getMessage());
  }catch (SQLException e) {
   System.err.println(e.getMessage());
  }
 }

 public ResultSet executeQuery(String sql) {
  try {
    //conn=DriverManager.getConnection(url,user,pass);
   stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
     ResultSet.CONCUR_READ_ONLY);
   rs = stmt.executeQuery(sql);
  } catch (SQLException ex) {
   ex.printStackTrace();
   System.err.println(ex.getMessage());
  } finally {
  }
  return rs;
 }

 public int executeUpdate(String sql) {
  int result = 0;
  try {
    //conn=DriverManager.getConnection(url,user,pass);
   stmt2 = conn.createStatement();
   result = stmt2.executeUpdate(sql);
  } catch (SQLException ex) {
   ex.printStackTrace();
   result = 0;
  } finally {
  }
  return result;
 }

 public void freeConn() {
  try {
   if (conn != null) {
    conn.close();
   }
  } catch (Exception e) {
   e.printStackTrace(System.err);
  } finally {
  }
 }

 public void close() {
  
  try {
   if (rs != null)
    rs.close();
   if (stmt != null)
    stmt.close();
   if (stmt2 != null)
    stmt2.close();
  } catch (Exception e) {
   e.printStackTrace(System.err);
  }
 }
}

 

 

web文件加入

 

 
 
    <servlet>
        <description>
            This is the description of my J2EE component
        </description>
        <display-name>
            This is the display name of my J2EE component
        </display-name>
        <servlet-name>
            CookieServlet
        </servlet-name>
        <servlet-class>
            test.servlet.SelectServlet
        </servlet-class>
    </servlet>
 
 
    <servlet>
        <description>
            This is the description of my J2EE component
        </description>
        <display-name>
            This is the display name of my J2EE component
        </display-name>
        <servlet-name>
            CookieServlet2
        </servlet-name>
        <servlet-class>
            test.servlet.SelectServlet2
        </servlet-class>
    </servlet>
   
    <servlet-mapping>
        <servlet-name>
            CookieServlet
        </servlet-name>
        <url-pattern>
            /servlet/select
        </url-pattern>
    </servlet-mapping>
 
 
 
    <servlet-mapping>
        <servlet-name>
            CookieServlet2
        </servlet-name>
        <url-pattern>
            /servlet/select2
        </url-pattern>
    </servlet-mapping>

 

 

新建JSP文件

 

<%@ page language="java" contentType="text/html; charset=gb2312"
 pageEncoding="gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<jsp:useBean id ="db"  scope="page" class="test.servlet.ConnDB53" ></jsp:useBean>


<html>
<head>
<title>3级菜单联动演示</title>
<script type="text/javascript">
    var req;
    function Change_Select(){
    //当第一个下拉框的选项发生改变时调用该函数
      var country = document.getElementByIdx('one').value;
      var url = "servlet/select?id="+ escape(country);
      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; //指定回调函数为callback
        req.send(null);
      }
    }
    function callback(){
      if(req.readyState ==4){
        if(req.status ==200){
          parseMessage();//解析XML文档
        }else{
          alert("Not able to retrieve description" + req.statusText);
        }
      }
    }
    function parseMessage(){
      var xmlDoc = req.responseXML.documentElement;
      //获得返回的XML文档
      var xSel = xmlDoc.getElementsByTagName_r('select');
      //获得XML文档中的所有<select>标记
      var city = document.getElementByIdx('two');
      //获得网页中的第二个下拉框
      city.options.length=0;
      //每次获得新的数据的时候先把每二个下拉框架的长度清0
     
      for(var i=0;i<xSel.length;i++){
        var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
        //获得每个<select>标记中的第一个标记的值,也就是<value>标记的值
        var xText = xSel[i].childNodes[1].firstChild.nodeValue;
        //获得每个<select>标记中的第二个标记的值,也就是<text>标记的值
       
        var option = new Option(xText, xValue);
        //根据每组value和text标记的值创建一个option对象
        try{
          city.add(option);//将option对象添加到第二个下拉框中
        }catch(e){
        }
      }
    }
    //*************************************************************************
      function Change_Select2(){
      var city = document.getElementByIdx('two').value;
      var url = "servlet/select2?id="+ escape(city);
      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();
        }else{
          alert("Not able to retrieve description" + req.statusText);
        }
      }
    }
    function parseMessage2(){
      var xmlDoc = req.responseXML.documentElement;
      var xSel = xmlDoc.getElementsByTagName_r('select');
      var street = document.getElementByIdx('three');
      street.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{
          street.add(option);
        }catch(e){
        }
      }
    }       
  </script>
</head>
<body>
<%
 String sql=" select * from  country ";

 ResultSet rs =db.executeQuery(sql);
 
 List dlist = new ArrayList();
 List vlist = new ArrayList();
 try {
  while (rs.next()) {
   dlist.add((String) rs.getString("name"));
   vlist.add(rs.getString("type"));
  }
 } catch (Exception e) {
  e.printStackTrace();
 }
%>
<div align="center">
<form name="form1" method="post" action="">
<table width="70%" border="0" cellspacing="0" cellpadding="0">
 <tr>
  <td align="center">国家城市选择</td>
 </tr>
 <tr>
  <td><select name="one" id="one" onChange="Change_Select()">
   <!--第一个下拉菜单-->
   <option value="0">--请选择--</option>
   <%
    for (int i = 0; i < dlist.size(); i++) {
   %>
   <option value="<%=vlist.get(i) %>"><%=dlist.get(i)%></option>
   <%
    }
   %>
  </select> <select name="two" id="two" onChange="Change_Select2()">
   <!--第二个下拉菜单-->
   <option value="0">--请选择--</option>
  </select> <select name="three" id="three">
   <!--第三个下拉菜单-->
   <option value="0">--请选择--</option>
  </select></td>
 </tr>
</table>
</form>
</div>
</body>
</html>

分享到:
评论

相关推荐

    Ajax实现的三级联动下拉菜单

    struts2+jsp+json+javascript实现的三级下拉菜单,没有service和dao层,数据是虚拟的。需要的欢迎下载。项目直接导入myeclipse就可以使用。访问路径localhost:8080/ajax_day02_hw/proviencecityarea.jsp

    基于Ajax的三级联动下拉菜单.rar

    基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar

    jsp+ajax 三级联动菜单

    【jsp+ajax 三级联动菜单】是一个典型的Web开发技术应用场景,它主要利用JavaServer Pages(JSP)和Asynchronous JavaScript and XML(AJAX)来实现动态网页中的数据交互和页面更新。在这个例子中,我们看到的是一个...

    Ajax JavaWeb JS 三级联动

    在Web开发中,"Ajax JavaWeb JS 三级联动"是一个常见的功能需求,它涉及...总之,"Ajax JavaWeb JS 三级联动"是一个集成了前端、后端和异步通信技术的复杂功能,通过合理的分工协作,可以实现高效、流畅的Web交互体验。

    ajax三级联动菜单

    **三、三级联动菜单实现** 1. **HTML结构**:首先,我们需要创建一个包含三个下拉框的HTML结构,分别对应一级、二级和三级菜单。每个下拉框的改变事件都将触发Ajax请求。 2. **JavaScript逻辑**:使用DWR提供的API...

    AJAX三级联动菜单

    通过以上步骤,我们可以实现一个功能完善的AJAX三级联动菜单。这个项目对于理解AJAX、JavaScript、jQuery、Java Servlet以及JSON数据交互具有很好的实践价值,同时也能提升前端与后端的协作能力。在实际应用中,这种...

    ajax实现简单城市三级联动菜单

    城市三级联动菜单是一种常见...总的来说,实现城市三级联动菜单涉及到前端的AJAX交互、后端的数据处理以及合理的数据库设计。通过这个过程,我们可以了解到前后端协同工作的重要性,以及如何通过异步通信提升用户体验。

    js和ajax实现三级联动.zip

    在这个“js和ajax实现三级联动.zip”压缩包中,包含了一个实现三级联动(省市区选择)的示例。这种功能常用于地址输入或者地理定位等场景,为用户提供了流畅的导航体验。 首先,我们来理解一下什么是三级联动。在...

    纯js实现ajax无刷新三级联动

    本项目"纯js实现ajax无刷新三级联动"旨在利用JavaScript和Ajax技术,无需页面整体刷新即可实现多级选择联动效果,这种效果常见于下拉菜单的联动筛选中。在描述中提到,此项目使用了JSON格式进行数据交换,这有助于...

    淘宝商品发布三级联动菜单.zip

    这个"淘宝商品发布三级联动菜单.zip"文件包含了实现这一功能的源代码,主要依赖于JavaScript库jQuery 1.9.1版本。 jQuery是一个轻量级、高性能的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互。...

    联动菜单大全(含ajax,无限级联动菜单)

    本资源包“联动菜单大全”包含了多种类型的联动菜单实现,包括与数据库交互的、使用AJAX技术的,以及无限级别的联动菜单。这些菜单方案可以极大地提升用户体验,尤其是在需要用户进行多级选择时。 首先,我们要理解...

    仿淘宝商品发布三级联动菜单

    在三级联动菜单中,CSS3可以用来美化下拉菜单的外观,包括颜色、字体、边框、阴影、过渡和动画等,同时通过媒体查询实现响应式布局,确保在不同屏幕尺寸上都能正常显示。 3. **JavaScript/jQuery**:JavaScript是...

    web页面三级联动菜单

    在实现三级联动菜单的过程中,我们需要掌握以下几个关键知识点: 1. HTML 结构:首先,我们需要创建一个HTML结构来定义菜单的层次关系。通常,我们会使用`&lt;ul&gt;`和`&lt;li&gt;`标签来构建多级嵌套的列表,一级菜单作为顶级...

    Ajax三级联动菜单

    Ajax三级联动菜单是一种常见的前端交互...总的来说,Ajax三级联动菜单通过异步通信实现了动态数据加载,提高了用户体验,减少了不必要的页面刷新。理解这个过程并能够实现这样的功能,对前端开发者来说是一项基本技能。

    三级联动菜单三级联动菜单

    在“三级联动菜单”的实现中,关键知识点包括: 1. **DOM操作**:当用户在某个级别做出选择时,JavaScript通过操作DOM(Document Object Model)来更新和显示下一个级别的选项。这可能涉及到监听事件、元素的增删改...

    ajax实现三级联动

    本话题将详细讲解如何利用AJAX实现三级联动效果,这是一种在用户选择某个选项后,自动更新下级选项列表的技术,通常应用于地区选择、商品分类等场景。 首先,我们需要理解AJAX的基本原理。AJAX允许网页在不重新加载...

    ajax三级联动,三级联动,联动,ajax,无刷新三级联动

    总之,实现Ajax三级联动的关键在于利用JavaScript和Ajax技术进行动态数据交互,通过监听用户的选择事件,动态加载并更新下拉菜单选项。这一过程涉及前端与后端的紧密协作,以提供流畅、无刷新的交互体验。

    商品发布三级联动菜单js代码.zip

    "商品发布三级联动菜单js代码" 是一种实现这一功能的技术解决方案,它常见于商城网站,提升用户体验,增强商品搜索的准确性。这种技术主要依赖JavaScript(JS)语言,通过前端代码实现页面元素的动态交互。 一、...

Global site tag (gtag.js) - Google Analytics