纯JSP+DWR实现三级联动下拉选择菜单实现技巧

纯JSP+DWR实现三级联动下拉选择菜单,可以参考以下步骤:

  1. 首先创建一个JSP页面,其中需要引入DWR JavaScript库和JQuery,这里以使用CDN资源为例:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>三级联动选择菜单</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/dwr/3.0.2/dwr.min.js"></script>
    <script src="js/china.js"></script>
</head>
<body>
    <form>
        <!--省份-->
        <select id="province" onchange="getCity()">
            <option value="">请选择省份</option>
            <!--调用DWR方法动态生成省份列表-->
            <script type="text/javascript">
                dwr.engine.setActiveReverseAjax(true);
                ProvinceService.getProvince(function (list) {
                    for (var i = 0; i < list.length; i++) {
                        document.write("<option value='" + list[i].id + "'>" + list[i].name + "</option>");
                    }
                });
            </script>
        </select>
        <!--城市-->
        <select id="city" onchange="getDistrict()">
            <option value="">请选择城市</option>
        </select>
        <!--区县-->
        <select id="district">
            <option value="">请选择区县</option>
        </select>
    </form>
    <script src="js/select.js"></script>
</body>
</html>
  1. 创建一个JavaScript文件,名为select.js,在其中添加以下代码:
function getCity() {
    //获取省份id
    var provinceId = $('#province').val();
    //调用DWR方法动态获取城市列表
    CityService.getCityByProvinceId(provinceId, function (list) {
        //清空原有的城市和区县列表
        $('#city').empty().append("<option value=''>请选择城市</option>");
        $('#district').empty().append("<option value=''>请选择区县</option>");
        //循环遍历城市列表,将城市添加到对应的下拉框选项中
        for (var i = 0; i < list.length; i++) {
            $('#city').append("<option value='" + list[i].id + "'>" + list[i].name + "</option>");
        }
    });
}

function getDistrict() {
    //获取城市id
    var cityId = $('#city').val();
    //调用DWR方法动态获取区县列表
    DistrictService.getDistrictByCityId(cityId, function (list) {
        //清空原有的区县列表
        $('#district').empty().append("<option value=''>请选择区县</option>");
        //循环遍历区县列表,将区县添加到对应的下拉框选项中
        for (var i = 0; i < list.length; i++) {
            $('#district').append("<option value='" + list[i].id + "'>" + list[i].name + "</option>");
        }
    });
}
  1. 创建一个Java类ProvinceService,使用DWR注解标识为服务,
import java.util.ArrayList;
import java.util.List;
public class ProvinceService {
    public static List<Province> getProvince() {
        List<Province> list = new ArrayList<>();
        for (int i = 0; i < China.PROVINCES.length; i++) {
            Province province = new Province();
            province.setId(i);
            province.setName(China.PROVINCES[i][0]);
            list.add(province);
        }
        return list;
    }
}
  1. 创建一个Java类CityService和一个Java类DistrictService,也使用DWR注解标识为服务。
import java.util.ArrayList;
import java.util.List;
public class CityService {
    public static List<City> getCityByProvinceId(int provinceId) {
        List<City> list = new ArrayList<>();
        for (int i = 0; i < China.PROVINCES[provinceId][1].length; i++) {
            City city = new City();
            city.setId(i);
            city.setName(China.PROVINCES[provinceId][1][i][0]);
            city.setProvinceId(provinceId);
            list.add(city);
        }
        return list;
    }
}
import java.util.ArrayList;
import java.util.List;
public class DistrictService {
    public static List<District> getDistrictByCityId(int cityId) {
        List<District> list = new ArrayList<>();
        int provinceId = China.CITY[cityId][0];
        for (int i = 0; i < China.PROVINCES[provinceId][1][cityId][1].length; i++) {
            District district = new District();
            district.setId(i);
            district.setName(China.PROVINCES[provinceId][1][cityId][1][i]);
            district.setCityId(cityId);
            list.add(district);
        }
        return list;
    }
}
  1. 创建Java实体类ProvinceCityDistrict,分别包含省份、城市和区县的id和name属性。
public class Province {
    private int id;
    private String name;
    //setter和getter方法省略
}
public class City {
    private int id;
    private String name;
    private int provinceId;
    //setter和getter方法省略
}
public class District {
    private int id;
    private String name;
    private int cityId;
   //setter和getter方法省略
}
  1. 最后,还需要导入中国省市县数据,以静态数据China来模拟数据库,文件命名为china.js

```javascript
var China={
"PROVINCES": [
["北京市", [["市辖区", ["东城区", "西城区", "崇文区", "宣武区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区", "密云县", "延庆县"]]]],
["天津市", [["市辖区", ["和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "塘沽区", "汉沽区", "大港区", "东丽区", "西青区", "津南区", "北辰区", "武清区", "宝坻区", "宁河县", "静海县", "蓟县"]]]],
["河北省", [["石家庄市", ["长安区", "桥东区", "桥西区", "新华区", "井陉矿区", "裕华区", "井陉县", "正定县", "栾城县", "行唐县", "灵寿县", "高邑县", "深泽县", "赞皇县", "无极县","平山县", "元氏县", "赵县", "辛集市", "藁城市", "晋州市", "新乐市", "鹿泉市"]], ["唐山市", ["路南区", "路北区", "古冶区", "开平区", "丰南区", "丰润区", "滦县", "滦南县", "乐亭县", "迁西县", "玉田县", "唐海县", "遵化市", "迁安市"]], ["秦皇岛市", ["海港区", "山海关区", "北戴河区", "青龙满族自治县", "昌黎县", "抚宁县", "卢龙县"]], ["邯郸市", ["邯山区", "丛台区", "复兴区", "峰峰矿区", "邯郸县", "临漳县", "成安县", "大名县", "涉县", "磁县", "肥乡县", "永年县","邱县", "鸡泽县", "广平县", "馆陶县", "魏县", "曲周县", "武安市"]], ["邢台市", ["桥东区", "桥西区", "邢台县", "临城县", "内丘县", "柏乡县", "隆尧县", "任县", "南和县", "宁晋县", "巨鹿县", "新河县", "广宗县", "平乡县", "威县", "清河县", "临西县", "南宫市", "沙河市"]], ["保定市", ["新市区", "北市区", "南市区", "满城县", "清苑县", "涞水县", "阜平县", "徐水县", "定兴县", "唐县", "高阳县", "容城县", "涞源县", "望都县", "安新县", "易县", "曲阳县", "蠡县", "顺平县", "博野县", "雄县", "涿州市", "定州市", "安国市", "高碑店市"]], ["张家口市", ["桥东区", "桥西区", "宣化区", "下花园区", "宣化县", "张北县", "康保县", "沽源县", "尚义县", "蔚县", "阳原县", "怀安县", "万全县", "怀来县", "涿鹿县", "赤城县", "崇礼县"]], ["承德市", ["双桥区", "双滦区", "鹰手营子矿区", "承德县", "兴隆县", "平泉县", "滦平县", "隆化县", "丰宁满族自治县", "宽城满族自治县", "围场满族蒙古族自治县"]], ["沧州市", ["新华区", "运河区", "沧县", "青县", "东光县", "海兴县", "盐山县", "肃宁县", "南皮县", "吴桥县", "献县", "孟村回族自治县", "泊头市", "任丘市", "黄骅市", "河间市"]], ["廊坊市", ["安次区", "广阳区", "固安县", "永清县", "香河县", "大城县", "文安县", "大厂回族自治县", "霸州市", "三河市"]], ["衡水市", ["桃城区", "枣强县", "武邑县", "武强县", "饶阳县", "安平县", "故城县", "景县", "阜城县", "冀州市", "深州市"]]]
],
"CITY": [
[0, [["东城区", []], ["西城区", []], ["崇文区", []], ["宣武区", []], ["朝阳区", []], ["丰台区", []], ["石景山区", []], ["海淀区", []], ["门头沟区", []], ["房山区", []], ["通州区", []], ["顺义区", []], ["昌平区", []], ["大兴区", []], ["怀柔区", []], ["平谷区", []], ["密云县", []], ["延庆县", []]]],
[1, [["和平区", []], ["河东区", []], ["河西区", []], ["南开区", []], ["河北区", []], ["红桥区", []], ["塘沽区", []], ["汉沽区", []], ["大港区", []], ["东丽区", []], ["西青区", []], ["津南区", []], ["北辰区", []], ["武清区", []], ["宝坻区", []], ["宁河县", []], ["静海县", []], ["蓟县", []]]],
[2, [["长安区", []], ["桥东区", []], ["桥西区", []], ["新华区", []], ["井陉矿区", []], ["裕华区", []], ["井陉县", []], ["正定县", []], ["栾城县", []], ["行唐县", []], ["灵寿县", []], ["高邑县", []], ["深泽县", []], ["赞皇县", []], ["无极县", []], ["平山县", []], ["元氏县", []], ["赵县", []], ["辛集市", []], ["藁城市", []], ["晋州市", []], ["新乐市", []], ["鹿泉市", []]]],
[3, [["路南区", []], ["路北区", []], ["古冶区", []], ["开平区", []], ["丰南区", []], ["丰润区", []], ["滦县", []], ["滦南县", []], ["乐亭县", []], ["迁西县", []], ["玉田县", []], ["唐海县", []], ["遵化市", []], ["迁安市", []]]],
[4, [["海港区", []], ["山海关区", []], ["北戴河区", []], ["青龙满族自治县", []], ["昌黎县", []], ["抚宁县", []], ["卢龙县", []]]],
[5, [["邯山区", []], ["丛台区", []], ["复兴区", []], ["峰峰矿区", []], ["邯郸县", []], ["临漳县", []], ["成安县", []], ["大名县", []], ["涉县", []], ["磁县", []], ["肥乡县", []], ["永年县", []], ["邱县", []], ["鸡泽县", []], ["广平县", []], ["馆陶县", []], ["魏县", []], ["曲周县", []], ["武安市", []]]],
[6, [["桥东区", []], ["桥西区", []], ["邢台县", []], ["临城县", []], ["内丘县", []], ["柏乡县", []], ["隆尧县", []], ["任县", []], ["南和县", []], ["宁晋县", []], ["巨鹿县", []], ["新河县", []], ["广宗县", []], ["平乡县", []], ["威县", []], ["清河县", []], ["临西县", []], ["南宫市", []], ["沙河市", []]]],
[7, [["桥东区", []], ["桥西区", []], ["宣化区", []], ["下花园区", []], ["宣化县", []], ["张北县", []], ["康保县", []], ["沽源县", []], ["尚义县", []], ["蔚县", []], ["阳原县", []], ["怀安县", []], ["万全县", []], ["怀来县", []], ["涿鹿县", []], ["赤城县", []

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯JSP+DWR实现三级联动下拉选择菜单实现技巧 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • SpringMVC RESTFul实战案例访问首页

    下面是关于“SpringMVC RESTFul实战案例访问首页”的完整攻略,包含两个示例说明。 SpringMVC RESTFul实战案例访问首页 SpringMVC是一个流行的Java Web框架,它可以帮助我们更加方便地构建Web应用程序。本文将介绍如何使用SpringMVC构建一个RESTFul风格的Web应用程序,并访问首页。 步骤一:创建Sprin…

    Java 2023年5月17日
    00
  • SpringBoot应用监控带邮件警报的实现示例

    SpringBoot应用监控带邮件警报是一种常用的应用监控方案,可以在应用发生异常情况时,自动发送邮件提醒开发人员进行处理。下面我将给出一个完整的攻略,包含以下几个步骤: 添加依赖 在SpringBoot项目的pom.xml文件中添加对Spring Boot Actuator和Spring Boot Mail的依赖,以实现监控和发送邮件功能。 <dep…

    Java 2023年5月20日
    00
  • SpringBoot基于Mybatis-Plus自动代码生成

    下面是关于“Spring Boot基于Mybatis-Plus自动代码生成”的完整攻略: 1. 简介 Mybatis-Plus是Mybatis的一个开源插件,提供了许多功能,例如自动代码生成、通用CRUD操作、分页和逻辑删除等。通过Spring Boot和Mybatis-Plus的结合,我们可以快速构建高效的数据库操作应用程序。 2. 步骤 2.1 配置po…

    Java 2023年5月20日
    00
  • 浅谈Java 继承接口同名函数问题

    浅谈Java 继承接口同名函数问题 在Java中,当父类和接口中同时存在同名函数时,子类在继承父类并实现接口时,需要注意同名函数的冲突问题。本文将详细讲解Java 继承接口同名函数问题解决方法。 同名函数冲突问题 在Java中,当一个子类继承一个父类并实现一个接口时,如果父类和接口中具有相同名称和参数的方法,那么子类必须对该方法进行实现。 解决方法 为了解决…

    Java 2023年5月26日
    00
  • asp.net 根据汉字的拼音首字母搜索数据库(附 LINQ 调用方法)

    我来为您讲解如何使用ASP.NET根据汉字的拼音首字母搜索数据库。具体实现方式可以分为以下三步骤: 构建拼音首字母索引 由于直接对汉字进行搜索会比较困难,因此我们需要将汉字转换成拼音,且只需要保留拼音的首字母,然后再进行搜索。 在ASP.NET中,我们可以使用Microsoft提供的PinyinConverter库来实现拼音转换。具体操作步骤如下: usin…

    Java 2023年5月19日
    00
  • Java开发环境配置方法

    Java开发环境配置方法 为了进行Java开发,需要在计算机上配置相应的开发环境。下面是Java开发环境配置的方法: 1. 下载JDK 要安装Java开发环境,必须先下载Java Development Kit(JDK)。从Oracle官方网站上下载并安装最新版本的JDK。 官方下载链接: https://www.oracle.com/java/techno…

    Java 2023年5月23日
    00
  • 详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

    详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化 Tomcat配置 1.引入Tomcat依赖 在项目的pom.xml文件中引入以下Tomcat依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId…

    Java 2023年5月19日
    00
  • Java实现简单的表达式计算器功能示例

    Java实现简单的表达式计算器功能示例 在本攻略中,我们将介绍如何使用Java实现一个简单的表达式计算器。该计算器可以接受简单的算术表达式,并返回计算结果。我们将使用Java编程语言,其中包含有关如何使用Java变量、表达式、运算符和控制流的信息。 步骤1:创建项目并编写基本代码 你可以使用任何你熟悉或喜欢的Java开发工具来创建一个新项目。在这个项目中,你…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部