1. 程式人生 > >省份-城市-區域三級聯動【struts2 + ajax +非資料庫版】

省份-城市-區域三級聯動【struts2 + ajax +非資料庫版】

package loaderman;

/**
 * 實體,封裝省份和城市
 */
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; } }
package loaderman;

import java.util.List;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 後臺控制器
 */
public class ProvinceCityAreaAction extends ActionSupport{
    
//業務層 private ProvinceCityAreaService provinceCityAreaService = new ProvinceCityAreaService(); //Bean是實體,封裝省份和城市 private Bean bean; public Bean getBean() { return bean; } public void setBean(Bean bean) { this.bean = bean; } /** * 根據省份查詢城市
*/ public String findCityByProvince() throws Exception{ System.out.println("查詢城市進來了"); cityList = provinceCityAreaService.findCityByProvince(bean.getProvince()); //將List集合轉成JSON文字 return SUCCESS; } /** * 根據城市查詢區域 */ public String findAreaByCity() throws Exception{ System.out.println("查詢區域進來了"); areaList = provinceCityAreaService.findAreaByCity(bean.getCity()); //將List集合轉成JSON文字 return SUCCESS; } private List<String> cityList;//需要轉成JSON的集合,且為其設定值 private List<String> areaList;//需要轉成JSON的集合,且為其設定值 public List<String> getCityList() {//外掛會呼叫getXxx()方法來獲取需要轉成JSON的集合 return cityList; } public List<String> getAreaList() { return areaList; } }
package loaderman;

import java.util.ArrayList;
import java.util.List;

/**
 * 業務層

        */
public class ProvinceCityAreaService {
    /**
     * 根據省份查詢城市
     */
    public List<String> findCityByProvince(String province) throws Exception{
        List<String> cityList = new ArrayList<String>();
        if("廣東".equals(province)){
            cityList.add("廣州");
            cityList.add("深圳");
            cityList.add("中山");
        }else if("湖南".equals(province)){
            cityList.add("長沙");
            cityList.add("株洲");
        }
        return cityList;
    }

    /**
     * 根據城市查詢區域
     */
    public List<String> findAreaByCity(String city) throws Exception{
        List<String> areaList = new ArrayList<String>();
        if("廣州".equals(city)){
            areaList.add("天河");
            areaList.add("白雲");
        }else if("深圳".equals(city)){
            areaList.add("寶安");
            areaList.add("南山");
        }else if("中山".equals(city)){
            areaList.add("AA");
            areaList.add("BB");
        }else if("長沙".equals(city)){
            areaList.add("CC");
            areaList.add("DD");
        }else if("株洲".equals(city)){
            areaList.add("EE");
            areaList.add("FF");
        }
        return areaList;
    }
}
<?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.3.dtd">

<struts>
    
    <!-- 
        理論:struts2的外掛包,就能將Action中的List轉成JSON文字
    
        》匯入struts2-json-plugin-2.3.1.1.jar包到/WEB-INF/lib目錄下
        》自已的包繼承json-default包,且json-default包繼承struts-default包
          那麼自已的包能用到json-default和struts-default這二個包中的功能
        》在Action中寫一個getXxx()方法返回需要轉成JSON字串的物件 
    -->
    
    <package name="mypackage" extends="json-default" namespace="/"> 
    
        
        <!-- 全域性結果 -->
        <global-results>
            <result name="success" type="json"/>
        </global-results>
    
    
        <!-- 根據省份查詢城市 -->
        <action 
            name="findCityRequest" 
            class="loaderman.ProvinceCityAreaAction"
            method="findCityByProvince">
        </action>
        
        
        <!-- 根據城市查詢區域 -->
        <action 
            name="findAreaRequest" 
            class="loaderman.ProvinceCityAreaAction"
            method="findAreaByCity">
        </action>
        
        
    </package>
    
</struts>
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>省份-城市-區域三級聯動</title>
    <script type="text/javascript" src="js/jquery-1.8.2.js"></script>
  </head>
  <body>
    
    <select id="province">
        <option>選擇省份</option>
        <option>湖南</option>
        <option>廣東</option>
    </select>

    <select id="city">
        <option>選擇城市</option>
    </select>

    <select id="area">
        <option>選擇區域</option>
    </select>
    
    
    <!-- 省份--城市 -->
    <script type="text/javascript">
        //定位"省份"下拉框,同時提交change事件
        $("#province").change(function(){
            //清空城市下拉框中的內容,除第一項外
            $("#city option:gt(0)").remove();
            //清空區域下拉框中的內容,除第一項外
            $("#area option:gt(0)").remove();
            //獲取選中的省份
            var province = $("#province option:selected").text();
            //如果不是"選擇省份"的話
            if("選擇省份" != province){
                //非同步傳送請求到伺服器
                //引數一:url表示請求的路徑
                var url = "${pageContext.request.contextPath}/findCityRequest?time="+new Date().getTime();
                //引數二:sendData表示以JSON格式傳送的資料
                var sendData = {
                    "bean.province" : province
                };
                //引數三:function(){}處理或回撥函式
                $.post(url,sendData,function(backData,textStatus,ajax){
                    //測試 
                    //alert( ajax.responseText );
                    //測試,backData是一個js物件,cityList是屬性
                    var array = backData.cityList;
                    //陣列的長度
                    var size = array.length;
                    //迭代陣列
                    for(var i=0;i<size;i++){
                        //獲取陣列中的每個元素
                        var city = array[i];
                        //建立option元素
                        var $option = $("<option>"+city+"</option>");
                        //將option元素新增到城市下拉框中
                        $("#city").append( $option );
                    }
                });
            }
        });                    
    </script>
    
    
    
    
    
    <!-- 城市--區域 -->
    <script type="text/javascript">
        //定位"城市"下拉框,同時提交change事件
        $("#city").change(function(){
            //清空區域下拉框中的內容,除第一項外
            $("#area option:gt(0)").remove();
            //獲取選中的城市
            var city = $("#city option:selected").text();
            //如果不是"選擇省份"的話
            if("選擇城市" != city){
                //非同步傳送請求到伺服器
                //引數一:url表示請求的路徑
                var url = "${pageContext.request.contextPath}/findAreaRequest?time="+new Date().getTime();
                //引數二:sendData表示以JSON格式傳送的資料
                var sendData = {
                    "bean.city" : city
                };
                //引數三:function(){}處理或回撥函式
                $.post(url,sendData,function(backData,textStatus,ajax){
                    //測試 
                    //alert( ajax.responseText );
                    //測試,backData是一個js物件,cityList是屬性
                    var array = backData.areaList;
                    //陣列的長度
                    var size = array.length;
                    //迭代陣列
                    for(var i=0;i<size;i++){
                        //獲取陣列中的每個元素
                        var area = array[i];
                        //建立option元素
                        var $option = $("<option>"+area+"</option>");
                        //將option元素新增到區域下拉框中
                        $("#area").append( $option );
                    }
                });
            }
        });
    </script>
    
  </body>
</html>