纯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日

相关文章

  • java多线程开发ScheduledExecutorService简化方式

    当我们需要在Java应用程序中执行定时任务时,可以使用ScheduledExecutorService。使用该工具可以轻松实现多线程执行任务,并使用线程池复用线程,从而减少资源的浪费和线程创建的时间。 下面是使用ScheduledExecutorService实现任务调度的完整攻略: 步骤1:创建线程池 我们首先需要创建一个线程池。在实际应用中,为了避免线程…

    Java 2023年5月19日
    00
  • CentOS7和8中安装Maven3.8.4的简单步骤

    下面我为你详细讲解 “CentOS7和8中安装Maven3.8.4的简单步骤”的完整攻略。 安装Java环境 在安装Maven之前,需要先在服务器上安装Java环境,否则Maven将无法正常使用。 # 在终端输入以下命令进行Java环境的安装 yum install java-1.8.0-openjdk-devel -y 安装完成后,检查Java环境是否正常…

    Java 2023年5月19日
    00
  • mybatis and,or复合查询操作

    下面是关于 Mybatis 中 AND 和 OR 复合查询操作的完整攻略。 基础知识 在 Mybatis 中,我们可以使用 <where> 元素来构造复杂的条件语句,其中包含了 AND 和 OR 连接符。如下所示: <select id="selectByExample" resultMap="BaseResu…

    Java 2023年5月20日
    00
  • 关于Spring统一异常处理及说明

    关于Spring统一异常处理及说明 在项目开发过程中,我们经常会遇到各种异常情况,比如参数校验不通过、数据不存在、数据库连接失败等等。当应用存在多个异常类型时,异常处理就显得比较复杂,不方便维护。为了方便异常的管理和维护,我们可以使用Spring提供的统一异常处理机制。 统一异常处理的实现方式 在Spring中,处理异常的方式有两种:1. @Exceptio…

    Java 2023年5月27日
    00
  • JVM相关面试题及答案(小结)

    下面是针对“JVM相关面试题及答案(小结)”这篇文章的详细讲解攻略: 1. 简介 该文章主要介绍了与JVM有关的面试题目及答案,共分为3个部分:JVM基础知识、JVM垃圾回收以及JVM调优。该文章的目的是为了帮助读者提高对JVM的了解,并在面试过程中做好准备。 2. JVM基础知识 该部分主要介绍了JVM的一些基础知识,包括JVM的体系结构、类加载器以及线程…

    Java 2023年5月19日
    00
  • Java中的IllegalStateException是什么?

    Java中的IllegalStateException 在Java编程中,当我们的应用程序处于不适合执行给定操作的状态时,会抛出IllegalStateException。 通俗一点讲,即在方法调用之前或之后进行检查,如果当前对象状态无法支持这种方法调用,则抛出IllegalStateException异常。 何时会抛出IllegalStateExcepti…

    Java 2023年4月27日
    00
  • Spring Boot 中密码加密的两种方法

    下面是关于Spring Boot中密码加密的两种方法的完整攻略。 1、使用BCryptPasswordEncoder 1.1 添加依赖 在pom.xml文件中添加如下依赖,用于使用BCryptPasswordEncoder加密密码: <dependency> <groupId>org.springframework.security&…

    Java 2023年5月20日
    00
  • Java微信小程序oss图片上传的实现方法

    我很乐意为你介绍“Java微信小程序oss图片上传的实现方法”的完整攻略。 简介 微信小程序是基于微信平台提供的一种新型应用,其天生具备了社交和强大的传播能力。作为一种重要的互联应用,微信小程序在业界受到广泛关注和应用。本文主要讲解在微信小程序中使用OSS存储来实现图片上传的相关知识和具体操作。 前置知识 在开始讲解具体实现方法之前,有几个重要的前置知识需要…

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