使用ajax+json+struts实现省份下拉框二级联动

来源:互联网 发布:sql 怎么给表取别名 编辑:程序博客网 时间:2024/05/17 23:32

前台jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'provincecityarea.jsp' starting page</title></head><body><select id="provinceID" style="width:150px"><option>选择省份</option><option>河南</option><option>上海</option><option>杭州</option></select><select id="cityID" style="width:150px"><option>选择城市</option></select><select id="areaID" style="width:150px"><option>选择区域</option></select></body><!--     省份>城市     --><script type="text/javascript">document.getElementById("provinceID").onchange = function() {//清空城市下拉框var cityEle = document.getElementById("cityID");cityEle.options.length = 1;//清空区域下拉框var areaEle = document.getElementById("areaID");areaEle.options.length = 1;//定位到当前所选的值var pro = this[this.selectedIndex].innerHTML;//如果选择了城市,开始触发ajaxif ("选择省份" != pro) {var ajax = createAjax(); //创建ajax对象function createAjax() {var a = null;try {a = new ActiveXObject("microsoft.xmlhttp");} catch (e) {a = new XMLHttpRequest();}return a;}//设置参数var method = "POST";var url = "${pageContext.request.contextPath}/findCityByProvinceRequest?time="+ new Date().getTime();//准备请求ajax.open(method, url);//设置请求头ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")var content = "bean.province=" + pro;//向服务器发送ajax.send(content);//监听状态ajax.onreadystatechange = function() {if (ajax.readyState == 4) {if (ajax.status == 200) {//返回JAVA格式的JSON文本var jsonJAVA = ajax.responseText;//p所代表的是java格式的json文本,是不能直接被js执行的//解决方案:将java格式的json文本,转成js格式的json文本//如何做:用js提供的一个函数搞定var jsonJS = eval("(" + jsonJAVA + ")");//取城市数组var array = jsonJS.cityList;var size = array.length;//遍历for ( var i = 0; i < size; i++) {var city = array[i];//创建一个option节点,内容为城市数组的值var option = document.createElement("option");option.innerHTML = city;//把option节点添加到select节点里面,即城市节点里面添加城市名cityEle.appendChild(option);}}}}}}</script><!-- 城市->区域 --><script type="text/javascript">document.getElementById("cityID").onchange = function() {var areaElement = document.getElementById("areaID");areaElement.options.length = 1;var city = this[this.selectedIndex].innerHTML;if ("选择城市" != city) {//NO1)var ajax = createAjax();function createAjax() {var a = null;try {a = new ActiveXObject("microsoft.xmlhttp");} catch (e) {a = new XMLHttpRequest();}return a;}//NO2)var method = "POST";var url = "${pageContext.request.contextPath}/findAreaByCityRequest?time="+ new Date().getTime();ajax.open(method, url);//NO3)ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")//NO4)var content = "bean.city=" + city;ajax.send(content);//------------------------------------------等待//NO5)ajax.onreadystatechange = function() {if (ajax.readyState == 4) {if (ajax.status == 200) {//NO6)var jsonJAVA = ajax.responseText;var jsonJS = eval("(" + jsonJAVA + ")");var array = jsonJS.areaList;var size = array.length;for ( var i = 0; i < size; i++) {var area = array[i];var option = document.createElement("option");option.innerHTML = area;areaElement.appendChild(option);}}}}}}</script></html>

城市和省份封装JavaBean

public class Bean {private String province;// 省份private String city;// 城市public Bean() {}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}}

struts的action处理

public class ProvinceCityAreaAction extends ActionSupport {//封装对象属性,使用模型驱动的话需实现模型驱动接口,新建对象并私有,重写getModel()对象private Bean bean;public Bean getBean() {return bean;}public void setBean(Bean bean) {this.bean = bean;}/** * 根据省份获取城市 */public String findCityByProvince() throws Exception {cityList = new ArrayList<String>();if ("上海".equals(bean.getProvince())) {cityList.add("闵行");cityList.add("浦东");} else if ("河南".equals(bean.getProvince())) {cityList.add("洛阳");cityList.add("郑州");cityList.add("焦作");} else if ("杭州".equals(bean.getProvince())) {cityList.add("余杭");cityList.add("江干");cityList.add("西湖");cityList.add("萧山");}// 让struts2框架帮你将List/Set/Map<String>转成JSON文本return SUCCESS;}/** * 根据城市获取区域 */public String findAreaByCity() throws Exception {areaList = new ArrayList<String>();if ("洛阳".equals(bean.getCity())) {areaList.add("AA");areaList.add("BB");} else if ("闵行".equals(bean.getCity())) {areaList.add("CC");areaList.add("DD");;} else if ("西湖".equals(bean.getCity())) {areaList.add("EE");areaList.add("FF");} else if ("郑州".equals(bean.getCity())) {areaList.add("GG");areaList.add("HH");}return SUCCESS;}private List<String> areaList;// 区域的集合private List<String> cityList;// 城市的集合public List<String> getCityList() {return cityList;}public List<String> getAreaList() {return areaList;}}

struts.xml配置

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="myPackage" extends="json-default" namespace="/"><!-- 全局结果类型 --><global-results><result name="success" type="json"/></global-results><action name="checkRequest" class="action.CheckcodeAction"method="check"></action><!-- 省份->城市 --><action name="findCityByProvinceRequest" class="provincecityarea.ProvinceCityAreaAction" method="findCityByProvince"></action><!-- 城市->区域 --><action name="findAreaByCityRequest" class="provincecityarea.ProvinceCityAreaAction" method="findAreaByCity"></action></package></struts>



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 阳光英文 阳光尼桑 尼桑新阳光 什么阳光 日产阳光吧 怎样的阳光 阳光照片 作文阳光 阳光的意思 阳光车 阳光 图片 的阳光 什么的阳光 阳光男生 中油阳光 葵花阳光 阳光阳光 阳光沙扒湾 阳光健康险 阳光揽胜 阳光餐厅 阳光力天 阳光代表 阳光路上 收藏阳光 午后阳光 收集阳光 一厘米的阳光 阳光下的真实 阳光保险公司可靠吗 阳光用英语怎么说 你是我的阳光 阳光照片唯美 阳光地带同人网 阳光唯美图片 阳光教育平台 阳光英语怎么说 阳光英文怎么写 日产阳光2015款 尼桑阳光自动挡 日产阳光新车多少钱