纯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, [["桥东区", []], ["桥西区", []], ["宣化区", []], ["下花园区", []], ["宣化县", []], ["张北县", []], ["康保县", []], ["沽源县", []], ["尚义县", []], ["蔚县", []], ["阳原县", []], ["怀安县", []], ["万全县", []], ["怀来县", []], ["涿鹿县", []], ["赤城县", []

阅读剩余 74%

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

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

相关文章

  • java asp分析各种搜索引擎的关键字,自动识别url 中关键字的编码

    为了实现搜索引擎关键字分析和自动识别URL中的关键字编码,我们需要进行以下步骤: 1. 获取URL中的关键字 我们可以使用Java语言的URLDecoder类中的decode方法,对URL进行解码,得到其中的关键字。具体代码示例如下: String url = "https://www.baidu.com/s?wd=%E6%90%9C%E7%8B%…

    Java 2023年5月20日
    00
  • Spring声明式事务配置使用详解

    Spring声明式事务配置使用详解 什么是事务 事务是一组完整的业务操作,这些操作作为一个原子单元,要么全部成功,要么全部失败回滚,保证数据库中的数据一致性。 声明式事务的优点 Spring框架提供的声明式事务管理有以下几个好处: 代码简洁:通过使用声明式事务管理,Spring框架可以将所有的数据库事务处理的代码都放在配置文件中,这样就不需要在业务逻辑代码中…

    Java 2023年5月20日
    00
  • Java利用自定义注解、反射实现简单BaseDao实例

    下面是详细的Java利用自定义注解、反射实现简单BaseDao实例的攻略: 一、什么是自定义注解? 自定义注解是一种特殊的interface,它和普通接口有些类似,但是它仅仅是一种标记,没有任何具体的方法。Java提供了元注解来为注解提供信息,元注解可以放在注解前面,用于描述注解本身的信息。 二、自定义注解的作用? 自定义注解常用于标记,其作用就是给编译器、…

    Java 2023年6月1日
    00
  • SpringBoot在Controller层接收参数的n种姿势(超详细)

    下面我来详细讲解“SpringBoot在Controller层接收参数的n种姿势(超详细)”的完整攻略。 1. query参数 1.1 注解@RequestParam @RequestParam 注解是用来从request中获取指定参数值的,它具有以下属性: value:参数别名。如 value=”myParam” 表示 request 中的参数名字是 my…

    Java 2023年5月19日
    00
  • 浅聊JVM–基础版

    浅聊JVM–基础版 一、来源 jvm共有三种 Sun公司: HotSpot使用最多 BEA:JRockit IBM:J9VM ​ 今天我们主要了解的是Sun公司的HotSpot(关于HotSpot的爱恨情仇这里就不做过多解释了。)我们以前测试jdk是否安装成功,java的环境变量是否配置成功会使用java -version命令来检查。有一个细节大家可以看一…

    Java 2023年5月7日
    00
  • SpringBoot SpringSecurity JWT实现系统安全策略详解

    SpringBoot SpringSecurity JWT实现系统安全策略详解 系统安全策略概述 在今天的互联网时代,安全性已经成为一个至关重要的问题,尤其是对于Web应用程序而言。SpringSecurity是Spring框架下的一个强大的安全框架,可以实现基于Web的安全保护。JWT是一种轻量级的身份认证和授权方案,可以帮助我们实现在分布式应用程序中的安…

    Java 2023年5月20日
    00
  • js分页工具实例

    JS分页工具实例 本文将为大家讲解如何使用JavaScript编写分页工具的实例。本文涵盖了完整的实现过程、示例说明和代码实现。通过本文的介绍,您将学会如何使用JavaScript和jQuery创建简单的分页工具。 实现原理 分页工具的实现原理很简单,即通过计算数据总量和每页数据数量,生成页码列表。当用户点击某一页时,更新数据展示区域内容,并更新页码列表的当…

    Java 2023年6月16日
    00
  • Java使用Maven BOM统一管理版本号的实现

    Java使用Maven BOM(Bill Of Materials)可以统一管理项目库依赖的版本号,避免了在POM文件中重复声明版本号的冗余问题,并且可以减轻开发者手动维护库依赖版本的工作量。 以下是Java使用Maven BOM统一管理版本号的实现攻略: 1.创建BOM项目 首先,创建一个Maven项目,称为“BOM项目”。在pom.xml文件中定义BOM…

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