• Ajax异步请求struts的JSON机制(省市区三级联动)


    1.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.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="cn.itcast.javaee.js.provincecityarea.ProvinceCityAreaAction" 
                method="findCityByProvince">
            </action>
            
            
            <!-- 根据城市查询区域 -->
            <action 
                name="findAreaRequest" 
                class="cn.itcast.javaee.js.provincecityarea.ProvinceCityAreaAction" 
                method="findAreaByCity">
            </action>
            
            
        </package>
        
    </struts>

     2.Bean.java

    package cn.itcast.javaee.js.provincecityarea;
    
    /**
     * 实体,封装省份和城市
     * @author AdminTC
     */
    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;
        }
    }

    3. Action

    package cn.itcast.javaee.js.provincecityarea;
    
    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{
            cityList = provinceCityAreaService.findCityByProvince(bean.getProvince());
            //将List集合转成JSON文本
            return SUCCESS;
        }
        /**
         * 根据城市查询区域
         */
        public String findAreaByCity() throws Exception{
            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;
        }
        
    }

     4.Ajax异步请求

    <%@ 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>
  • 相关阅读:
    rowkey设计原则和方法
    ubuntu安装及使用
    sqoop数据迁移
    Hive 自定义UDF操作步骤
    hive之数据导入导出
    MySQL优化
    MongoDB、Redis、elasticSearch、hbase的对比
    数据库基本操作
    count(*) 和 count(1)和count(列名)区别
    BigDecimal的运算——加减乘除
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/7350743.html
Copyright © 2020-2023  润新知