首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

应用Struts2+Jquery实现三级联动

2012-08-31 
使用Struts2+Jquery实现三级联动1.准备数据create database linkageuse linkage--省份create table prov

使用Struts2+Jquery实现三级联动

1.准备数据

create database linkage;use linkage;--省份create table province(   pid int primary key,      pname varchar(20) );insert into province(pid,pname) values(1,'吉林省');insert into province(pid,pname) values(2,'辽宁省');--城市create table city(   cid int primary key,      cname varchar(20),    pid int    );insert into city(cid,cname,pid) values(1,'长春',1);insert into city(cid,cname,pid) values(2,'四平',1);insert into city(cid,cname,pid) values(3,'大连',2);insert into city(cid,cname,pid) values(4,'鞍山',2);-- 乡镇create table town (   tid int primary key,      tname varchar(20),    cid int      );insert into town(tid,tname,cid) values(1,'九台',1);insert into town(tid,tname,cid) values(2,'农安',1);insert into town(tid,tname,cid) values(3,'梨树',2);insert into town(tid,tname,cid) values(4,'公主岭',2);insert into town(tid,tname,cid) values(5,'沙河口',3);insert into town(tid,tname,cid) values(6,'甘井子',3);insert into town(tid,tname,cid) values(7,'铁东',4);insert into town(tid,tname,cid) values(8,'立山',4);

?2.创建实体对象

2.1省份

package org.monday.domain;/** * 省份 *  * @author Monday */public class Province {private Integer pid;private String pname;public Integer getPid() {return pid;}public void setPid(Integer pid) {this.pid = pid;}public String getPname() {return pname;}public void setPname(String pname) {this.pname = pname;}}

?

2.2城市实体

package org.monday.domain;/** * 城市 *  * @author Monday */public class City {private Integer cid;private String cname;private Integer pid;public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public Integer getPid() {return pid;}public void setPid(Integer pid) {this.pid = pid;}}

?

2.3乡镇实体

package org.monday.domain;/** * 乡镇 *  * @author Monday */public class Town {private Integer tid;private String tname;private Integer cid;public Integer getTid() {return tid;}public void setTid(Integer tid) {this.tid = tid;}public String getTname() {return tname;}public void setTname(String tname) {this.tname = tname;}public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}}

?

3.编写DAO层(Service这里就省略了...)

3.0JDBC工具类

package org.monday.util;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;/** * JDBC工具类 *  * @author Monday */public class JdbcUtil {private static Properties config = new Properties();/** * 加载驱动 */static {try {InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");config.load(in);Class.forName(config.getProperty("driver"));} catch (Exception e) {throw new ExceptionInInitializerError(e);}}/** * 获取连接 */public static Connection getConnection() {try {return DriverManager.getConnection(config.getProperty("url"), config.getProperty("username"), config.getProperty("password"));} catch (SQLException e) {throw new RuntimeException(e);}}/** * 释放资源 */public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}rs = null;}if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}pstmt = null;}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}conn = null;}}/** * 测试连接 */public static void main(String[] args) {System.out.println(JdbcUtil.getConnection());System.out.println("ok");}}

jdbc.properties

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/linkageusername=rootpassword=root

??

?

3.1省份DAO

package org.monday.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 org.monday.domain.Province;import org.monday.util.JdbcUtil;/** * 省份DAO *  * @author Monday */public class ProvinceDao {public List<Province> findAllProvince() {List<Province> list = new ArrayList<Province>();Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {conn = JdbcUtil.getConnection();String sql = "select pid,pname from province";pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery();while (rs.next()) {Province province = new Province();province.setPid(rs.getInt("pid"));province.setPname(rs.getString("pname"));list.add(province);}} catch (SQLException e) {throw new RuntimeException(e);} finally {JdbcUtil.release(conn, pstmt, rs);}return list;}}

?3.2城市DAO

package org.monday.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 org.monday.domain.City;import org.monday.util.JdbcUtil;/** * 城市DAO *  * @author Monday */public class CityDao {public List<City> findAllCity(Integer pid) {List<City> list = new ArrayList<City>();Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {conn = JdbcUtil.getConnection();String sql = "select cid,cname,pid from city where pid=?";pstmt = conn.prepareStatement(sql);pstmt.setInt(1, pid);rs = pstmt.executeQuery();while (rs.next()) {City city = new City();city.setCid(rs.getInt("cid"));city.setCname(rs.getString("cname"));city.setPid(rs.getInt("pid"));list.add(city);}} catch (SQLException e) {throw new RuntimeException(e);} finally {JdbcUtil.release(conn, pstmt, rs);}return list;}}

?

3.3乡镇DAO

package org.monday.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 org.monday.domain.Town;import org.monday.util.JdbcUtil;/** * 乡镇DAO *  * @author Monday */public class TownDao {public List<Town> findAllTown(Integer cid) {List<Town> list = new ArrayList<Town>();Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {conn = JdbcUtil.getConnection();String sql = "select tid,tname,cid from town where cid=?";pstmt = conn.prepareStatement(sql);pstmt.setInt(1, cid);rs = pstmt.executeQuery();while (rs.next()) {Town town = new Town();town.setTid(rs.getInt("tid"));town.setTname(rs.getString("tname"));town.setCid(rs.getInt("cid"));list.add(town);}} catch (SQLException e) {throw new RuntimeException(e);} finally {JdbcUtil.release(conn, pstmt, rs);}return list;}}

?

?啰嗦了半天....终于写WEB层了...

?

4.Action

package org.monday.web;import java.io.IOException;import java.util.List;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;import org.apache.struts2.ServletActionContext;import org.monday.dao.CityDao;import org.monday.dao.ProvinceDao;import org.monday.dao.TownDao;import org.monday.domain.City;import org.monday.domain.Province;import org.monday.domain.Town;import com.opensymphony.xwork2.ActionSupport;/** * 处理三级联动的Action *  * @author Monday */public class LinkageAction extends ActionSupport {private static final long serialVersionUID = -8658430555400755301L;private Integer pid;private Integer cid;private HttpServletResponse response = ServletActionContext.getResponse();/** * 获取省份 */public String getProvince() {ProvinceDao provinceDao = new ProvinceDao();List<Province> provinceList = provinceDao.findAllProvince();JSONArray jsonArray = JSONArray.fromObject(provinceList);try {response.setContentType("text/html;charset=UTF-8");response.getWriter().print(jsonArray.toString());} catch (IOException e) {e.printStackTrace();}return null;}/** * 获取城市 */public String getCityByPid() {CityDao cityDao = new CityDao();List<City> cityList = cityDao.findAllCity(pid);JSONArray jsonArray = JSONArray.fromObject(cityList);try {response.setContentType("text/html;charset=UTF-8");response.getWriter().print(jsonArray.toString());} catch (IOException e) {e.printStackTrace();}return null;}/** * 获取乡镇 */public String getTownByCid() {TownDao townDao = new TownDao();List<Town> townList = townDao.findAllTown(cid);JSONArray jsonArray = JSONArray.fromObject(townList);try {response.setContentType("text/html;charset=UTF-8");response.getWriter().print(jsonArray.toString());} catch (IOException e) {e.printStackTrace();}return null;}// -----------------public Integer getPid() {return pid;}public void setPid(Integer pid) {this.pid = pid;}public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}}

?

strutx.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts><!-- 设置开发模式 --><constant name="struts.devMode" value="true" /><package name="default" namespace="" extends="struts-default"><action name="linkageAction_*" method="{1}"><result></result></action></package></struts>

??

5.HTML

<html>  <head>    <title>三级联动</title><script language="JavaScript" src="jquery-1.4.2.js"></script><script type="text/javascript" src="my.js"></script>  </head>  <body>     <select id="province" name="province">       <option value="">请选择</option>     </select> <select id="city" name="city"> <option value="">请选择</option> </select> <select id="town" name="town"> <option value="">请选择</option> </select>  </body></html>

?

6.JS(重点来了)

$(document).ready(function () {/* 获取省份 */$.post("linkageAction_getProvince.action", function (data) {var jsonObj = eval("(" + data + ")");for (var i = 0; i < jsonObj.length; i++) {var $option = $("<option></option>");$option.attr("value", jsonObj[i].pid);$option.text(jsonObj[i].pname);$("#province").append($option);}});/* 根据省份获取城市 */$("#province").change(function () {$.post("linkageAction_getCityByPid.action", {pid:$("#province").val()}, function (data) {/* 清空城市 */$("#city option[value!='']").remove();/* 清空乡镇 */$("#town option[value!='']").remove();var jsonObj = eval("(" + data + ")");for (var i = 0; i < jsonObj.length; i++) {var $option = $("<option></option>");$option.attr("value", jsonObj[i].cid);$option.text(jsonObj[i].cname);$("#city").append($option);}});});/* 根据城市获取乡镇 */$("#city").change(function () {$.post("linkageAction_getTownByCid", {cid:$("#city").val()}, function (data) {/* 清空乡镇 */$("#town option[value!='']").remove();var jsonObj = eval("(" + data + ")");for (var i = 0; i < jsonObj.length; i++) {var $option = $("<option></option>");$option.attr("value", jsonObj[i].tid);$option.text(jsonObj[i].tname);$("#town").append($option);}});});});

?

项目结构:


应用Struts2+Jquery实现三级联动
?

  可以 不过js有个小bug 2 楼 yexichen 2012-01-03   您好,不知可否分享源代码?这个包我老是弄不好。。。

QQ:276099176 3 楼 smallbird111 2012-05-05   兄弟,给源代码来看看了!!!!!!!!!1453917139@qq.com 4 楼 sy_shu 2012-05-10   兄弟,求源码 1028521403@qq.com 5 楼 周一Monday 2012-05-11   各位朋友,这个东西我是一年前学JS写的,已经不知道哪去了。
而且,现在在单位就写后台,JS很久没碰了。。。

热点排行