基于ajax+struts实现的二级联动

周末闲来无事,就自己动手写了一个二级联动,主要使用了ajax,后台用struts作为控制器;有了二级联动之后,三级四级自然不在话下。废话少说,直接上源码。源码有点大,放在http://down.51cto.com/data/1470569。,完全免费。。。。

前台页面main.jsp:

main.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getcontextpath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">


<title>json+struts菜单联动</title>


<Meta http-equiv="pragma" content="no-cache">

<Meta http-equiv="cache-control" content="no-cache">

<Meta http-equiv="expires" content="0">

<Meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<Meta http-equiv="description" content="This is my page">

<script src="jquery-1.10.2.js"></script>

<script type="text/javascript">

$(document).ready(function(){

var bookfirst=$("#selectcountry");

var booksecond=$("#selectcity");

$("#selectcountry").change(function (){ //一级select变动时,出发ajax请求

$("#selectcity option").remove();//清空,二级select的option

$.ajax({

url: "getcity.action",

dataType : "JSON",165);white-space:pre;"> type: "GET",165);white-space:pre;"> data:{'city.cityname':$(this).val()},165);white-space:pre;"> success: function(data){//请求成果,回调返回json字符串

var citylist=eval(data);

console.log(citylist);

$("#selectcity").append("<option></option>");

$("#selectcity option")[0].text=" 请选择城市";

for(i=0;i<=citylist.length-1;i++){

var j=i+1;

$("#selectcity").append("<option></option>");

$("#selectcity option")[j].text=citylist[i].cityname;

}

}


});

});

</script>

</head>


<body>

<center>

<select id="selectcountry" style="width:200px;">

<option>

请选择国家

</option>

德国

加拿大

法国

日本

俄罗斯

</option>

</select>

<select id="selectcity" style="width:200px;margin-left: 50px;">

请选择城市

</select>



</center>

</body>

</html>

struts配置文件,struts.xml

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


<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"

"http://struts.apache.org/dtds/struts-2.1.dtd">


<struts>

<constant name="struts.devMode" value="true"></constant>

<constant name="struts.custom.i18n.resources" value="city"></constant>

<constant name="struts.i18n.encoding" value="UTF-8"></constant>

<package name="json" extends="json-default">

<action name="getcity" class="com.jxj.action.CityAction" method="getcity">

<result name="SUCCESS" type="json">

<param name="root">citylist</param>

</result>

</action>

</package>

</struts>

处理请求的action:CityAction.java

package com.jxj.action;


import java.util.ArrayList;


import com.jxj.model.City;

import com.jxj.service.CityService;

import com.opensymphony.xwork2.ActionSupport;


public class CityAction extends ActionSupport {

ArrayList<City> citylist;

City city=new City();

public City getCity() {

return city;

}

public void setCity(City city) {

this.city = city;

public ArrayList<City> getCitylist() {

return citylist;

public void setCitylist(ArrayList<City> citylist) {

this.citylist = citylist;

CityService cityservice=new CityService();

public String getcity(){

System.out.println("hhhe");

String parentname=city.getCityname();

System.out.println("parentname:"+parentname);

citylist=new ArrayList<City>();

citylist= cityservice.getcity(parentname);

System.out.println(citylist.size());

return "SUCCESS";

}


实体City.java

package com.jxj.model;


public class City {

public int id;

public String cityname;

public String parentname;

public int getId() {

return id;

public void setId(int id) {

this.id = id;

public String getCityname() {

return cityname;

public void setCityname(String cityname) {

this.cityname = cityname;

public String getParentname() {

return parentname;

public void setParentname(String parentname) {

this.parentname = parentname;

service层CityService.java

package com.jxj.service;


import com.jxj.dao.CityDao;

import com.jxj.daoImpl.CityDaoImpl;

import com.jxj.model.City;


public class CityService {

CityDao citydao=new CityDaoImpl();

public ArrayList<City> getcity(String parentname) {

return citydao.getcity(parentname);

}


DAO层CityDao.java

package com.jxj.dao;


public interface CityDao {


ArrayList<City> getcity(String parentname);


DAO实现层CityDaoImpl.java

package com.jxj.daoImpl;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.sqlException;

import java.sql.Statement;

import java.util.ArrayList;

import com.jxj.util.DB;


public class CityDaoImpl implements CityDao {

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

ArrayList<City> citylist=new ArrayList<City>();

String sql="select distinct cityname from city where parentname='"+parentname+"'";

System.out.println(sql);

conn=DB.getConn();

stmt=DB.getStatement(conn);

rs=DB.getResultSet(stmt,sql);

try {

while(rs.next()){

//city.setId(rs.getInt("id"));

city.setCityname(rs.getString("cityname"));

citylist.add(city);

} catch (sqlException e) {

e.printstacktrace();

自己封装的JDBC连接工具类:DB.java

package com.jxj.util;

import java.sql.*;


public class DB {

public static Connection getConn() {

Connection conn = null;

Class.forName("com.MysqL.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:MysqL://localhost/demo?user=root&password=root");

} catch (ClassNotFoundException e) {

}

return conn;

public static PreparedStatement prepare(Connection conn,String sql) {

PreparedStatement pstmt = null;

if(conn != null) {

pstmt = conn.prepareStatement(sql);

return pstmt;

sql,int autoGenereatedKeys) {

pstmt = conn.prepareStatement(sql,autoGenereatedKeys);

public static Statement getStatement(Connection conn) {

Statement stmt = null;

stmt = conn.createStatement();

return stmt;

public static ResultSet getResultSet(Statement stmt,255);">ResultSet rs = null;

if(stmt != null) {

rs = stmt.executeQuery(sql);

return rs;

public static void executeUpdate(Statement stmt,255);">stmt.executeUpdate(sql);

public static void close(Connection conn) {

conn.close();

conn = null;

public static void close(Statement stmt) {

stmt.close();

stmt = null;

public static void close(ResultSet rs) {

if(rs != null) {

rs.close();

rs = null;

}


数据表结构

wKioL1PCSQ7CkYfcAAO3n-AuTRM208.jpg

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但是在某些特殊情况下,我们可能还需要使用IE6来访问网页。而在IE6中,我们通常会使用JavaScript来提交表单,来看一下具体操作。
PHP中的count()函数是用来计算数组或容器中元素的个数。这个函数十分方便,在编写代码时使用频率也非常高。无论你是要统计数组的长度、统计字符串中字符出现的次数还是统计对象中属性的个数,count()都可以帮助你轻松
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不刷新整个页面的情况下,向服务器发送请求并接收响应。通常来说,我们使用 AJAX 请求是为了获取后台数据,并将其展示在前端页面上。然而,有时候我们只需要
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页用户体验的技术,通过与服务器进行异步通信,实现在网页上局部刷新数据而不必整个页面刷新的功能。在实际开发中,我们经常需要从服务器端下载文件,而传统
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以在不刷新整个页面的情况下,向服务器发送请求并获取响应数据。在某些场景下,我们需要通过AJAX下载Excel文件流,以便于在前端使用或保存到本地。本文将详
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax,我们可以在不刷新整个页面的情况下向服务器发送请求并获得响应数据。而在Ajax的基础上,.get和.post是两种常用的请求方法,它们分别用于发送GET和POST请
AJAX(Asynchronous JavaScript and XML)是一种在网页上实现异步数据传输的技术。通过AJAX,网页可以在不刷新整个页面的情况下与服务器进行数据交互,提升用户体验和页面性能。在实际应用中,AJAX广泛用于表单提交、
在使用Ajax下拉加载数据的过程中,有时候会出现无法取到360度的问题。这个问题可能是由于代码逻辑的问题导致的,也有可能是网络延迟引起的。为了解决这个问题,我们需要对代码进行仔细排查,并且在合适的地方添加适当
本文将介绍Ajax和.post之间的区别。Ajax是一种用于在网页上进行异步通信的技术,能够在不刷新整个页面的情况下更新部分页面内容。.post是jQuery中的一个方法,用于向服务器发送POST请求。虽然它们都可以用于发送异步
AJAX(Asynchronous JavaScript and XML)是一种在Web页面上进行异步数据请求和交互的技术。它的出现使得页面在后台与服务器进行数据交互的同时,不需要重新加载整个页面。在网页开发中,常常需要实现文件上传功能,
最近,我对于在IE浏览器中使用Ajax上传文件进行了一番研究。我发现IE浏览器对于Ajax上传文件提供了支持,并且使用起来也相对简单。事实上,我们可以使用ActiveXObject对象来实现在IE浏览器中上传文件的功能。
AJAX是一种用于在不重新加载整个网页的情况下从服务器异步传输数据的技术。它允许我们通过JavaScript与服务器进行通信,并在网页上实现动态更新。然而,在使用AJAX时,我们可能遇到跨域问题。跨域是指在浏览器中,
当涉及与跨域请求相关的Ajax开发时,我们通常会选择使用POST方法。然而,有时我们会不得不面对无法使用POST方法发送Ajax请求的情况。本文将会深入探讨造成这种限制的原因,并提供一些常见且解决此问题的方法。
Python是一种常用的编程语言,它可以用来开发各种各样的应用程序。其中,猜数字游戏算得分是Python初学者非常适合的练习项目之一。
AJAX(Asynchronous JavaScript and XML)指的是一种在客户端和服务器之间进行异步数据交互的技术,它可以在不影响页面加载速度的情况下,实现与服务器的数据交互,并动态更新页面内容。通过AJAX,用户可以在不刷新整
AJAX 是一种用于在后台与服务器进行异步通信的技术。它能够实现在不刷新整个页面的情况下,通过后台发送请求并将响应返回到前端。然而,有时候在使用 AJAX 上传文件时会出现错误 7。本文将探讨这个错误的原因,并提
在现代网页开发中,Ajax 技术的应用日益广泛。其中,Ajax 下拉菜单 slide(下拉菜单的滑动效果)是一种常见且有趣的交互方式。通过使用 Ajax 技术实现下拉菜单 slide,可以为用户提供更好的用户体验,同时也能增加网
AJAX(Asynchronous JavaScript and XML)是一种常用的Web开发技术,它通过异步通信方式实现了与服务器的数据交互。在AJAX中,我们可以使用HTTP协议发送请求到服务器并获取响应。然而,有时候我们需要在请求中传递一
Python是一门非常流行的编程语言,近年来它的受欢迎度一直在不断地提高。在Python的使用者中还有一位特别的粉丝,他就是我们的歌手王力宏。
在前端开发中,使用Ajax来进行文件下载是一种常见的方法。通过Ajax可以实现在不刷新整个页面的前提下,向服务器发送请求并接收返回的文件数据。然而,当文件较大或者下载过程比较耗时时,我们可能需要提供一些提示或