省市联动

//servlet  获取浏览器提交过来的数据  并处理数据  响应给浏览器
package com.itheima.control;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.itheima.utils.City;
import com.itheima.utils.Province;
import com.itheima.utils.ProvinceCityUtils;
/**
* @author lxq
*/
public class ProvinceCityServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
    ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        //获取提交的方法
        String method = request.getParameter("method");
        //判断method方法
        if("pro".equals(method)){
            //如果是pro 则选择的是省份
            Set<Province> province = ProvinceCityUtils.getProvince();
            //把得到的省份转化成json  响应给
            String jsonString = JSONObject.toJSONString(province);
            response.getWriter().write(jsonString);
        }else if("city".equals(method)){
            //如果选择的城市  则根据 传递过来的参数  省份  找出省份对应的城市
            String province = request.getParameter("province");
            List<City> city = ProvinceCityUtils.getCity(province);
            //将city转换为json 响应给浏览器
            String jsonString = JSONObject.toJSONString(city);
            response.getWriter().write(jsonString);
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
    ServletException, IOException {
        doGet(request, response);
        
    }
}

//utils  类 封装数据  并可以得到省份和城市的方法
package com.itheima.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ProvinceCityUtils {
    //封装省份和城市
    private static final Map<Province, List<City>> map=new HashMap<Province, List<City>>();
    //初始化
    static{
        Province p1=new Province(1, "黑龙江");
        List<City> l1=new ArrayList<City>();
        l1.add(new City(1, "哈尔滨"));
        l1.add(new City(2, "大庆"));
        l1.add(new City(3, "齐齐哈尔"));
        map.put(p1, l1);
        
        Province p2=new Province(2, "吉林");
        List<City> l2=new ArrayList<City>();
        l2.add(new City(1, "长春"));
        l2.add(new City(2, "吉林"));
        l2.add(new City(3, "四平"));
        map.put(p2, l2);
        
        Province p3=new Province(3, "辽宁");
        List<City> l3=new ArrayList<City>();
        l3.add(new City(1, "沈阳"));
        l3.add(new City(2, "大连"));
        l3.add(new City(3, "葫芦岛"));
        map.put(p3, l3);
    }
    //写一个方获取省份
    public static Set<Province> getProvince(){
        Set<Province> keySet = map.keySet();
        return keySet;
    }
    //获取城市的方法
    public static  List<City> getCity(String pname){
        //根据传进来的省份  查找城市
        Set<Province> province = getProvince();
        
        for(Province p:province){
            //查找传进来的省份 对应的城市
            if(pname.equals(p.getName())){
                List<City> list = map.get(p);
                //将省份得到的所有城市信息返回
                return list;
            }
        }
        return null;//没找到
    }
}
//实体类
package com.itheima.utils;
public class Province {
     private int id;
     private String name;

package com.itheima.utils;
public class City {
     
     private int id;
     private String name;


//前端代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="/Ajax/js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
     $(function(){
           
           var url="/Ajax/ProvinceCityServlet";
           $.post(url+"?method=pro",
                     function(data){
                //解析data 由于我们服务器相应的是一个集合  得到的就是一个集合
                var pvos=eval(data);
                
                //遍历集合
                for(var i=0;i<pvos.length;i++){
                     var obj=pvos[i];
                     //把得到的每一个省份往select里面加
                     var option=$("<option>"+obj.name+"</option>");
                     //将option添加到select 里面
                     $("#province").append(option);
                }
           },"json");
           
           $("#province").change(function(){
                $("#city").html("<option>----选择城市----</option>");
                //获取选择的省份
                var province=$("#province").val();
           //因为服务器  需要根据  选择的省份  来找出对应的城市  所以需要传递参数省份
          $.post(url+"?method=city",{"province":province},function(data){
                //由于上一次  的选择会叠加  所以一直让第一行  保持选择城市
                var citys=eval(data);
                //遍历城市
                for(var i=0;i<citys.length;i++){
                     var city=citys[i];
                     var option=$("<option>"+city.name+"</option>");
                     $("#city").append(option);
                }
           },"json");
     });
});
</script>
</head>
<body>
     <!--  获取两次请求  一次是获取省份 一次是获取城市-->
     <select id="province">
           <option>----选择省份----</option>
     </select>
     <select id="city">
           <option>----选择城市----</option>
     </select>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值