AJAX级联菜单

 

AJAX级联菜单实例

说明 ajax级联菜单,例如,一级菜单选择中国,二级菜单列出中国城市;一级菜单选择美国,二级菜单列出美国城市。

数据库脚本 count.sql

DROP TABLE IF EXISTS `country`;

CREATE TABLE `country` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(50) default NULL,

`city` varchar(50) default NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

insert into country values(1,'中国','沈阳') ;

insert into country values(2,'中国','北京') ;

insert into country values(3,'美国','洛杉矶') ;

insert into country values(4,'美国','纽约') ;

DAO

package edu.syict.www.dao;

import java.util.List;

import org.hibernate.HibernateException;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.Transaction;

import edu.syict.www.HibernateSessionFactory;

public class DBOperator {

       @SuppressWarnings("unchecked")

       public List queryByName(String name){

              Session session = HibernateSessionFactory.getSession();

              List list=null ;

              String hql="SELECT co.city FROM Country AS co WHERE co.name=?" ;

              System.out.println(hql+name);

              Transaction tx = null;    

              try {

                     tx = session.beginTransaction();

                     Query query=session.createQuery(hql) ;

                     query.setString(0, name) ;

                     list=query.list() ;

                     System.out.println("数据库中记录个数:"+list.size()) ;

                     tx.commit() ;

              } catch (HibernateException e) {

                     if (tx != null)

                            tx.rollback();

                     throw e;

              }finally{

                     session.close();

              }    

              return list ;

       }

}

Bean类(Hibernate反向工程)Country.java

package edu.syict.www.POJO;

@SuppressWarnings("serial")

public class Country implements java.io.Serializable {

       private Integer id;

       private String name;

       private String city;

       public Country() {

       }

       public Country(String name, String city) {

              this.name = name;

              this.city = city;

       }

       public Integer getId() {

              return this.id;

       }

       public void setId(Integer id) {

              this.id = id;

       }

       public String getName() {

              return this.name;

       }

       public void setName(String name) {

              this.name = name;

       }

       public String getCity() {

              return this.city;

       }

       public void setCity(String city) {

              this.city = city;

       }

}

Country.hbm.xml

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="edu.syict.www.POJO.Country" table="country" catalog="test">

       <id name="id" type="java.lang.Integer">

            <column name="id" />

            <generator class="identity" />

        </id>

        <property name="name" type="java.lang.String">

            <column name="name" length="50" />

        </property>

        <property name="city" type="java.lang.String">

            <column name="city" length="50" />

        </property>

    </class>

</hibernate-mapping>

JSP页面

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ page import="java.util.*" %>

<%@ page import="edu.syict.www.dao.*" %>

<%@ page import="edu.syict.www.POJO.*" %>

<!DOCTYPE HTML PUBLIC "-//W 3C //DTD HTML 4.01 Transitional//EN">

<html>

<head>

    <title>My JSP 'menu.jsp' starting page</title>

</head>

<body>

<%

    Country c=null ;

    DBOperator dbo=new DBOperator() ;

    List listname=dbo.query("SELECT DISTINCT co.name FROM Country AS co") ;

    List listcity=dbo.query("SELECT DISTINCT co.city FROM Country AS co") ;

   

%>

<center>

<script type="text/javascript">

    var XMLHttpReq;

    var currentSort;

     //创建XMLHttpRequest对象      

    function createXMLHttpRequest() {

        if(window.XMLHttpRequest) { //Mozilla 浏览器

            XMLHttpReq = new XMLHttpRequest();

        }

        else if (window.ActiveXObject) { // IE浏览器

            try {

                XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");

            } catch (e) {

                try {

                    XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");

                } catch (e) {}

            }

        }

   }

    //发送请求函数

    function sendRequest(url) {

        createXMLHttpRequest();

        XMLHttpReq.open("GET", url, true);

        XMLHttpReq.onreadystatechange = processResponse;//指定响应函数

        XMLHttpReq.send(null); // 发送请求

    }

    // 处理返回信息函数

    function processResponse() {

        if (XMLHttpReq.readyState == 4) { // 判断对象状态

            if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息XMLHttpReq.status == 200

                updateMenu();

            } else { //页面不正常

                  alert("您所请求的页面有异常。");

            }

        }

    }

    //更新菜单函数

    function updateMenu() {

        var res=XMLHttpReq.responseXML.getElementsByTagName("res") ;

        //alert("res===="+res[0].firstChild.nodeValue);

        /**下面是用innerHTML输出控件内容的一般用法**/

        //var subMenu = "";

        //for(var i = 0; i < res.length; i++) {

        //    subMenu = subMenu + " " + res[i].firstChild.data + "";

        //}

        //currentSort.innerHTML = subMenu;

       

        var list = document.all.list;

        list.options.length=0;

        list.add(new Option("---请选择---",""));

        for(var i=0;i<res.length;i++){

            list.add(new Option(res[i].firstChild.nodeValue,res[i].firstChild.nodeValue));

        }

    }

    // 创建级联菜单函数

    function showSubMenu(obj) {

       //currentSort =document.getElementById(obj);

        //currentSort.parentNode.style.display = "";

        sendRequest("menujsp.jsp?sort=" + obj);

        /**下面这一句的作用是:每次选择后回到第一个选项**/

        //document.all.mli.options[0].selected=true;

    }

</script>

    <select name="mli" οnchange="showSubMenu(this.options[this.options.selectedIndex].value)" style="width:150px;">

           <option value="">---bbb---</option>

    <%

    for(int i=0;i<listname.size();i++){

           //c=(Country)listname.get(i) ;

           out.println("<option value='"+listname.get(i)+"'>"+listname.get(i)+"</option>") ;

    }

    %>

    </select>

    <select name="list" style="width:100px;">

           <option value="">---aaa---</option>

    <%

    for(int i=0;i<listcity.size();i++){

           out.println("<option value='"+listcity.get(i)+"'>"+listcity.get(i)+"</options>") ;

    }

    %>

    </select>

    <br>

</center>

</body>

</html>

JSP页面后台

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ page import="java.util.*" %>

<%@ page import="edu.syict.www.dao.*" %>

<%@ page import="edu.syict.www.POJO.*" %>

<%

       response.setContentType("text/xml; charset=UTF-8");

       response.setHeader("Cache-Control","no-cache");

      

       String sort=request.getParameter("sort") ;

      

       sort=new String(sort.getBytes("ISO8859-1"),"GB2312") ;

      

       System.out.println("转换编码后sort:"+sort) ;

      

       DBOperator dbo=new DBOperator() ;

       List cityes=new ArrayList() ;

       try{

              cityes=dbo.queryByName(sort) ;

       }catch(Exception e){

              e.printStackTrace() ;

       }

       out.println("<response>");

              for(int i=0;i<cityes.size();i++){

                     out.println("<res>"+cityes.get(i).toString()+"</res>") ;

                     System.out.println(cityes.get(i)) ;

              }

       out.println("</response>");

%>

如果我错误,请联系QQ244077575

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值