笔记:SSH遇到的问题之省市区根据数据库实现三级联动以及数据回显

省市区的三级联动

后台action代码:

//接收Json数据
		private String result;
		
		public String getResult() {
			return result;
		}

		public void setResult(String result) {
			this.result = result;
		}

//获得省份集合
	public String getProvince(){
		List<City> list=cityService.getProvince();
		Gson json = new GsonBuilder().enableComplexMapKeySerialization().create();
		result=json.toJson(list);
		return SUCCESS;
	}
	//获得市的集合
	public String getCity(){
		String getProvinceId=request.getParameter("provinceId");
		//log.info("从页面获得的provinceid:"+getProvinceId);
		Integer provinceId=Integer.valueOf(getProvinceId);
		List<City> list=cityService.getCity(provinceId);
		Gson json = new GsonBuilder().enableComplexMapKeySerialization().create();
		result=json.toJson(list);
		return SUCCESS;
	}
	//获得区的集合
	public String getArea(){
		String getCityID=request.getParameter("cityId");
		//log.info("从页面获得的cityid:"+getCityID);
		Integer cityId=Integer.valueOf(getCityID);
		List<City> list=cityService.getArea(cityId);
		Gson json = new GsonBuilder().enableComplexMapKeySerialization().create();
		result=json.toJson(list);
		//log.info(result);
		return SUCCESS;
	}

struts配置文件代码

<!-- 这里result name默认为success -->
<result type="json">
		<param name="root">result</param>
</result>

html代码

<tr>
         <td align="right"><span class="star_red">*</span>任职城市&nbsp;:</td>
         <td>
                            
           <select class="post_select_short" id="province" name="province">
                <!-- 回显的时候不需要这个提示 -->
               <option selected value="">请选择</option>
           </select>
                                
           <select class="post_select_short" id="city" name="city" >
                  </select>
                                
           <select class="post_select_short" id="area" name="area">
                  </select>
         </td>
</tr>

js代码

(提交表单)

<script type="text/javascript">
                       /**
                       	 * 省市区的三级联动 
                        */
                        
	//获得省
	$(document).ready(function(){
		$.ajax({
			url:"xxx.action",
			dataType:"json",//设置需要返回的数据类型
			success:function(data){
				var d = eval("("+data+")");
				if(!data) return;
			var html="";
			for(var i in d){
				html+='<option value='+d[i].id+'>'+d[i].atitle+'</option>';
			}
			$("#province").append(html);
			$("#province").change(function(){
				$("#city").html("");
				$("#area").html("");
				getCity(city,area);
				/* alert("*******************************");
				alert($(this).val());
				alert($("#province").val()); */
			});
			}
		});
	});
	//获得市
	function getCity(city,area){
		$.ajax({
			url:"xxx.action",
			data:{provinceId:$("#province").val()},
			dataType:"json",//设置需要返回的数据类型
			success:function(data){
				var d = eval("("+data+")");
				if(!data) return;
				var html='';
				for(var i in d){
					html+='<option value='+d[i].id+'>'+d[i].atitle+'</option>';
				}
				$("#city").append(html);
				$("#city").change(function(){
					$("#area").html('');
					getArea(area);
				});
				$("#city").get(0).selectedIndex=0;//默认选择第一项 
				getArea(area); 
			}
		});
	}
	//获得区
	function getArea(area){
		$.ajax({
			url:"xxx.action",
			data:{cityId:$("#city").val()},
			dataType:"json",//设置需要返回的数据类型
			success:function(data){
				/* alert("可以获得数据!");
				alert(data); */
				var d = eval("("+data+")");
				if(!data) return;
				var html='';
				for(var i in d){
					html+='<option value='+d[i].id+'>'+d[i].atitle+'</option>';
				}
				$("#area").append(html);
			}
		});
	}
</script>

(数据回显)

<script type="text/javascript">
                       /**
                       	 * 省市区的三级联动 回显
                        */
                        
	//获得省
	$(document).ready(function(){
		//获取后台传递的值 
		var city='${require.city}';
		var citys=city.split(" ");
		$.ajax({
			url:"require_getProvince.action",
			dataType:"json",//设置需要返回的数据类型
			success:function(data){
				var d = eval("("+data+")");
				if(!data) return;
			var html="";
			for(var i in d){
				html+='<option value='+d[i].id+'>'+d[i].atitle+'</option>';
			}
			$("#province").append(html);
			
			$("#province option").each(function(){
				if($(this).text()==citys[0]){
					$(this).attr("selected",true);
					getCity(citys[1],citys[2]);
				}
			})
			
			$("#province").change(function(){
				$("#city").html("");
				$("#area").html("");
				getCity(null,null);//省份改动的话,重置市和区 
			});
			}
		});
	});
	//获得市
	function getCity(city,area){
		$.ajax({
			url:"require_getCity.action",
			data:{provinceId:$("#province").val()},
			dataType:"json",//设置需要返回的数据类型
			success:function(data){
				var d = eval("("+data+")");
				if(!data) return;
				var html='';
				for(var i in d){
					html+='<option value='+d[i].id+'>'+d[i].atitle+'</option>';
				}
				$("#city").append(html);
				
				if(city!=null){
                    $("#city option").each(function(){
                        if($(this).text()==city){
                            $(this).attr("selected",true);
                        getArea(area);     
                    	}
                    })
				}
				
				$("#city").change(function(){
					$("#area").html('');
					getArea(null);//市改动的话,重置区
				});
				//$("#city").get(0).selectedIndex=0;//默认选择第一项 
				getArea(null); 
			}
		});
	}
	//获得区
	function getArea(area){
		$.ajax({
			url:"require_getArea.action",
			data:{cityId:$("#city").val()},
			dataType:"json",//设置需要返回的数据类型
			success:function(data){
				/* alert("可以获得数据!");
				alert(data); */
				var d = eval("("+data+")");
				if(!data) return;
				var html='';
				for(var i in d){
					html+='<option value='+d[i].id+'>'+d[i].atitle+'</option>';
				}
				$("#area").append(html);
				if(area!=null){
                    $("#area option").each(function(){
                    	if($(this).text()==area){
                            $(this).attr("selected",true);
                        }
                    })
				}
				
			}
		});
	}
</script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Vue+TypeScript和Element Plus的三级联动数据回显,可以按照以下步骤进行实现: 1. 首先,在Vue组件中定义省市区数据源,可以使用数组或者对象的形式存储。例如: ```typescript data() { return { provinceList: [], // 省份数据源 cityList: [], // 城市数据源 districtList: [], // 区县数据源 selectedProvince: '', // 选中的省份 selectedCity: '', // 选中的城市 selectedDistrict: '', // 选中的区县 // 其他数据... }; }, ``` 2. 在组件的`mounted`生命周期钩子函数中初始化省份数据源,并根据选中的省份获取对应的城市和区县数据。例如: ```typescript mounted() { // 初始化省份数据源 this.provinceList = [ { id: 1, name: '北京' }, { id: 2, name: '上海' }, { id: 3, name: '广东' }, // 其他省份... ]; // 根据选中的省份获取城市和区县数据 this.fetchCityList(this.selectedProvince); this.fetchDistrictList(this.selectedCity); }, ``` 3. 实现方法`fetchCityList`和`fetchDistrictList`,用于根据选中的省份和城市获取对应的城市和区县数据。可以使用ajax、axios或者其他方式获取数据。例如: ```typescript methods: { fetchCityList(provinceId: number) { // 根据省份ID获取城市数据,此处假设省份ID与城市数据对应 this.cityList = [ { id: 11, name: '北京市' }, { id: 12, name: '天津市' }, { id: 13, name: '石家庄市' }, // 其他城市... ]; // 清空选中的城市和区县 this.selectedCity = ''; this.selectedDistrict = ''; }, fetchDistrictList(cityId: number) { // 根据城市ID获取区县数据,此处假设城市ID与区县数据对应 this.districtList = [ { id: 111, name: '东城区' }, { id: 112, name: '西城区' }, { id: 113, name: '朝阳区' }, // 其他区县... ]; // 清空选中的区县 this.selectedDistrict = ''; }, }, ``` 4. 在模板中使用`<el-select>`组件实现三级联动选择框,并绑定选中的值和数据源。例如: ```html <el-select v-model="selectedProvince" placeholder="请选择省份" @change="fetchCityList(selectedProvince)"> <el-option v-for="province in provinceList" :key="province.id" :value="province.id" :label="province.name"></el-option> </el-select> <el-select v-model="selectedCity" placeholder="请选择城市" @change="fetchDistrictList(selectedCity)"> <el-option v-for="city in cityList" :key="city.id" :value="city.id" :label="city.name"></el-option> </el-select> <el-select v-model="selectedDistrict" placeholder="请选择区县"> <el-option v-for="district in districtList" :key="district.id" :value="district.id" :label="district.name"></el-option> </el-select> ``` 通过以上步骤,就可以实现省市区三级联动数据回显的功能了。当选择省份时,会根据选中的省份动态获取对应的城市数据;当选择城市时,会根据选中的城市动态获取对应的区县数据。同时,选中的值会与`selectedProvince`、`selectedCity`和`selectedDistrict`进行双向绑定,以便在提交表单或其他操作时使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值