`
x125521853
  • 浏览: 72658 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ajax联动菜单

    博客分类:
  • Ajax
阅读更多

    //model层:Area.java 

package com.wdpc.ajax.model;

public class Area {
	private int areaId;//市 id
	private String areaName;//区域名
	private int areaPid;//区域id

	//构造函数
	public Area(int areaId, String areaName, int areaPid) {
		super();
		this.areaId = areaId;
		this.areaName = areaName;
		this.areaPid = areaPid;
	}

	//get,set方法
	public int getAreaId() {
		return areaId;
	}

	public void setAreaId(int areaId) {
		this.areaId = areaId;
	}

	public String getAreaName() {
		return areaName;
	}

	public void setAreaName(String areaName) {
		this.areaName = areaName;
	}

	public int getAreaPid() {
		return areaPid;
	}

	public void setAreaPid(int areaPid) {
		this.areaPid = areaPid;
	}
}

   

    //dao层:   

package com.wdpc.ajax.comms;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DbManager {
	public static Connection getConnection(){
		Connection conn = null;
		try {
			Context context = new InitialContext();
			DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/ajax");
			conn = ds.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;		
	}
	
	public static void closeConnection(Connection conn,PreparedStatement pst,ResultSet rs){
		try{
			if(rs !=null){
				rs.close();
			}
			if(pst !=null){
				pst.close();
			}
			if(conn !=null){
				conn.close();
			}
		}catch(SQLException e){
			e.printStackTrace();
		}		
	}
}

 

    //AreaDao.java   

package com.wdpc.ajax.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.wdpc.ajax.comms.DbManager;
import com.wdpc.ajax.model.Area;

public class AreaDao {
	public List<Area> findAreaByPid(int pid) {
		Connection conn = DbManager.getConnection();//获取连接
		PreparedStatement pst = null;
		ResultSet rs = null;//结果集
		List<Area> list = new ArrayList<Area>();

		try {
			//执行语句
			pst = conn.prepareStatement("select * from area where areaId =?");
			pst.setInt(1, pid);
			rs = pst.executeQuery();
			//遍历结果
			while (rs.next()) {
				list.add(new Area(rs.getInt(1), rs.getString(2), rs.getInt(3)));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DbManager.closeConnection(conn, pst, rs);//关闭
		}
		return list;
	}
}

   

     //service层:AreaService.java    

package com.wdpc.ajax.service;

import java.util.List;
import com.wdpc.ajax.model.Area;

public interface AreaService {
	public List<Area> findAreaByPid(int pid);
}

 

    //实现service层:AreaServiceImpl.java   

package com.wdpc.ajax.service.impl;

import java.util.List;
import com.wdpc.ajax.dao.AreaDao;
import com.wdpc.ajax.model.Area;
import com.wdpc.ajax.service.AreaService;

public class AreaServiceImpl implements AreaService {
	private AreaDao areaDao;

	public AreaServiceImpl() {
		areaDao = new AreaDao();
	}
	
	//通过id获取区域
	public List<Area> findAreaByPid(int pid) {
		return areaDao.findAreaByPid(pid);
	}
}

 

    //action层:AreaServlet.java    

package com.wdpc.ajax.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wdpc.ajax.model.Area;
import com.wdpc.ajax.service.AreaService;
import com.wdpc.ajax.service.impl.AreaServiceImpl;

public class AreaServlet extends HttpServlet {
	private AreaService areaService;
	
	public AreaServlet() {
		areaService = new AreaServiceImpl();
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");//请求时编码方式
		response.setCharacterEncoding("utf-8");//响应时编码方式
		List<Area> list = new ArrayList<Area>();
		PrintWriter out = response.getWriter();
		int pid = -1;
		try {
			pid = Integer.parseInt(request.getParameter("pid"));//获取JSP页面传过来的pid
		} catch (NumberFormatException e) {			
		}

		if (pid != -1) {
			list = areaService.findAreaByPid(pid);
			out.print(getAreaXML(list));
		}
		out.flush();
		out.close();
	}

	private String getAreaXML(List<Area> list) {
		String str = "<root>";
		if (list != null && list.size() > 0) {
			for (Area area : list) {
				str += "<area id='" + area.getAreaId() + "' name='"
						+ area.getAreaName() + "' pid='" + area.getAreaPid()
						+ "'/>";
			}
		}
		str += "</root>";
		return str;
	}
}

 

    //数据源(context.xml)   

<Context>
<Resource name="jdbc/ajax" auth="Container"
	type="javax.sql.DataSource" maxActive="100" maxIdle="30"
	maxWait="10000" username="root" password="wdpc"
	driverClassName="com.mysql.jdbc.Driver"
	url="jdbc:mysql://localhost:3306/test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;mysqlEncoding=utf8" />
</Context>

    此xml放到META-INF下

 

    //my.js     支持的浏览器

function GetXmlHttpObject(){
	var xmlHttp=null;
	try{
  		// Firefox, Opera 8.0+, Safari
  		xmlHttp=new XMLHttpRequest();
  	}catch (e){
  		// Internet Explorer
  		try{
    		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    	}catch (e){
    		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    	}
  	}
	return xmlHttp;
}

function loadXMLDoc(filepath){
	var xmlDoc = null;
	try{//Internet Explorer
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	}catch(e){
		try{//Firefox, Mozilla, Opera, etc.
			xmlDoc = document.implementation.createDocument("","",null);
		}catch(e){
			alert(e.message);
		}
	}

	try{
		xmlDoc.async = false;
		xmlDoc.load(filepath);
	}catch(e){
		alert(e.message)
	}
	return xmlDoc;
}

function loadXMLString(str){
	var xmlStr = null;
	try{//Internet Explorer
		xmlStr = new ActiveXObject("Microsoft.XMLDOM");
		xmlStr.async="false";
		xmlStr.loadXML(str);
	}catch(e){
		try{//Firefox, Mozilla, Opera, etc.
			var parser=new DOMParser();
			xmlStr = parser.parseFromString(str,"text/xml");
		}catch(e){
			alert(e.message);
		}
	}	
	return xmlStr;
}

   

    //index.jsp   

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>   
<c:set var="basePath" value="${pageContext.request.contextPath}" /> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>ajax示例</title>
		<meta http-equiv="cache-control" content="no-cache" />
		<script type="text/javascript" src="${basePath}/script/my.js"></script>
		<script type="text/javascript">
		var xmlHttp = GetXmlHttpObject();
		function getArea(area_id,selectId){			
			if (xmlHttp==null){
  				alert ("您的浏览器不支持AJAX!");
  				return;
  			}
			xmlHttp.onreadystatechange=function(){
				//在这里,我们可以处理从服务器返回的数据,首先判断一下数据是否成功返回
				if (xmlHttp.readyState==4){
					var text = xmlHttp.responseText;					
					var xmlDoc = loadXMLString(text);					
					var selectObj = document.getElementById(selectId);
					while(selectObj.childNodes.length > 0){    
						selectObj.removeChild(selectObj.childNodes[0]);
					}					
					addNode("", "请选择", selectObj);				
					if(area_id === ""){
						return ;
					}					
					var areaNodes = xmlDoc.getElementsByTagName("area");
					var frag = document.createDocumentFragment();
					for(var i=0; i<areaNodes.length; i++){
						var id = areaNodes[i].getAttributeNode("id").nodeValue;						
						var name = areaNodes[i].getAttributeNode("name").nodeValue;
						addNode(id, name, frag);		
					}
					selectObj.appendChild(frag);
				}
			};
			xmlHttp.open("GET","${basePath}/AreaServlet?pid=" + area_id + "&time=" + new Date().getTime(),true);
			xmlHttp.send(null);
		}
		
		function addNode(attr, text, obj){
			var option = document.createElement("option");
			option.setAttribute("value",attr);
			var optionText = document.createTextNode(text);
			option.appendChild(optionText);	
			obj.appendChild(option);
		}
		
		function showCity(area_id,selectId){
			
			getArea(area_id,selectId);
		}
		</script>
	</head>
	<body onload="getArea(0,'province')">
		省份:
		<select id="province" onchange="showCity(this.value,'city')">
			<option value="">
				请选择
			</option>
		</select>
		城市:
		<select id="city">
			<option value="">
				请选择
			</option>
		</select>
	</body>
</html>

 

    //项目如下图   

     数据库驱动包需放到tomcat根目录lib下

 

     数据库test,表area    

create table area(
	ID int AUTO_INCREMENT,
	areaName varchar(10),
	areaId int,
	PRIMARY KEY(ID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8

   
    

  • 大小: 43.3 KB
  • 大小: 14.9 KB
分享到:
评论
1 楼 zsw12013 2012-02-15  
怎么不把你的数据库的数据也发过来????

相关推荐

    Ajax联动菜单

    ### Ajax联动菜单:深入解析与实现机制 在Web开发领域,动态加载数据并实时更新页面内容是提升用户体验的重要手段之一。Ajax(Asynchronous JavaScript and XML)技术因其无需刷新整个页面即可与服务器交互的能力,...

    Ajax联动菜单(asp.net)

    在ASP.NET开发中,Ajax联动菜单是一种常见的交互设计,它能提供流畅的用户体验,无需页面刷新即可更新相关信息。Ajax(Asynchronous JavaScript and XML)技术利用JavaScript异步处理数据,结合XML或其他格式的数据...

    Asp Ajax 联动菜单

    总之,Asp Ajax联动菜单的实现结合了服务器端的动态生成、客户端的异步交互和前端的动态更新,是提高Web应用交互性和性能的有效手段。对于Asp.NET开发者来说,熟悉并掌握这一技术对提升项目质量至关重要。

    Ajax 联动菜单 简单易学

    Ajax 联动菜单 Ajax 联动菜单Ajax 联动菜单

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

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

    AJAX无限级联动菜单

    **AJAX无限级联动菜单**是一种常见的Web交互技术,它基于ASP.NET框架,结合AJAX(Asynchronous JavaScript and XML)和ACCESS数据库实现。这个技术的主要目的是提供用户友好的界面,通过异步方式加载数据,无需刷新...

    ajax实现联动菜单.doc

    ### AJAX 实现联动菜单 #### 一、简介 在现代Web开发中,用户交互体验是提升网站质量和吸引力的重要因素之一。传统的网页提交方式通常需要重新加载整个页面来更新部分数据,这种方式不仅耗时而且用户体验较差。...

    ajax多级联动菜单

    【Ajax多级联动菜单】是一种常见的前端交互设计,它允许用户在选择某个菜单项时,自动更新下一级菜单的内容,以此类推,实现多级菜单之间的动态关联。这种技术广泛应用于网页表单填写、筛选器等场景,为用户提供更加...

    ajax三级联动菜单

    **Ajax 三级联动菜单详解** Ajax(Asynchronous JavaScript and XML)技术是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。在Web开发中,它极大地提升了用户体验,使得页面交互更加流畅。本实例中...

    一个和数据库关联的,二级联动菜单示例ajax实现

    这个"一个和数据库关联的,二级联动菜单示例ajax实现"是一个实用的代码示例,它展示了如何利用AJAX(异步JavaScript和XML)技术动态加载并更新二级菜单的内容,根据用户在一级菜单中的选择。 首先,我们来理解一下...

    无限级联动菜单(AJAX源码)

    这个教程和源码将帮助你理解如何利用AJAX实现一个无限级联动菜单。 1. **AJAX基础** AJAX的核心是XMLHttpRequest对象,它可以异步地向服务器发送请求,获取响应数据。在JavaScript中,你可以通过创建...

    jsp+ajax 三级联动菜单

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

    无限级联动菜单-AJAX版&JavaScript版

    在这个"无限级联动菜单-AJAX版&JavaScript版"中,我们将深入探讨如何使用AJAX和JavaScript技术实现这种功能。 AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的...

    AJAX三级联动菜单

    本项目是关于使用AJAX实现一个三级联动菜单,这种菜单通常用于地区选择、类别筛选等场景,当用户在一级菜单中选择一项时,二级菜单会动态加载对应的数据,同理,选择二级菜单后,三级菜单也会相应地更新。...

    ajax四级联动菜单

    【Ajax四级联动菜单】是一种基于Ajax技术实现的动态下拉菜单功能,通常用于网页上的地区选择,例如国家、省份、城市、区县等。在这个示例中,它使用了Oracle数据库存储四级菜单的数据,并结合JSP(JavaServer Pages...

    ajax二级联动菜单

    总的来说,利用Ajax实现二级联动菜单是一种常见的前端技术实践,它能够提高用户体验,使网页操作更加流畅。通过深入学习和实践,你将能够灵活运用Ajax解决更多类似的问题,提升你的Web开发技能。

    ASP 实用的ajax二级联动菜单

    在本项目中,"ASP 实用的ajax二级联动菜单"是一个结合了这两种技术的应用,旨在创建一个响应快速、交互流畅的二级菜单系统。 在ASP中,我们通常会使用VBScript或JScript作为脚本语言来处理服务器端逻辑。在这个案例...

Global site tag (gtag.js) - Google Analytics