Mybatis + js 實(shí)現(xiàn)下拉列表二級(jí)聯(lián)動(dòng)效果
一、業(yè)務(wù)需求
實(shí)現(xiàn)省份與城市的二級(jí)聯(lián)動(dòng)
二、實(shí)現(xiàn)效果

三、代碼實(shí)現(xiàn)
1. province_city.jsp
前端界面實(shí)現(xiàn)
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>二級(jí)聯(lián)動(dòng)</title>
<script src="/static/jQuery-1.11/jquery-1.11.3.min.js"></script>
<script>
// 頁(yè)面加載完畢執(zhí)行
$(function () {
let $p = $('#p');
let $c = $('#c');
// 給省份下拉框綁定值改變事件處理函數(shù),當(dāng)省份下拉框選項(xiàng)改變了,就發(fā)送請(qǐng)求獲取這個(gè)省份對(duì)應(yīng)
// 城市數(shù)據(jù),拿到數(shù)據(jù)再使用 DOM 顯示在城市下拉框中
$p.change(function () {
// 獲取被選中省份下拉框的 option 的 value 屬性值,即省份 id 值
let pid = $(this).val();
// 清除舊有子元素(每次改變省份需要清除城市元素,否則城市元素會(huì)一直添加)
$c.empty();
// 請(qǐng)選擇也被清除了,所以需要添加回來(lái)
$c.append('<option value="-1">請(qǐng)選擇</option>');
// 判斷是否選中了省份
if (pid >= 1) {
$.post('/cities', 'pid=' + pid, function (data) {
// 遍歷城市數(shù)組
data.forEach(function (value) {
console.log(value);
// 添加下拉元素
$c.append('<option value="' + value.id +'">' + value.name +'</option>');
});
});
}
});
});
</script>
</head>
<body>
省份:<select id="p">
<option value="-1">請(qǐng)選擇</option>
<!-- 遍歷后臺(tái)傳過(guò)來(lái)的省份集合 -->
<c:forEach items="${allProvince}" var="province">
<option value="${province.id}">${province.name}</option>
</c:forEach>
</select>
城市:<select id="c">
<option value="-1">請(qǐng)選擇</option>
</select>
</body>
</html>
2. TwoController
后臺(tái)處理方法
package com.yy.homework.web.controller;
import com.yy.homework.domain.City;
import com.yy.homework.domain.Province;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class TwoController {
// 獲取省份 JSON 數(shù)據(jù)
@RequestMapping("/provinces")
public String getProvinces(Model model) {
List<Province> allProvince = Province.getAllProvince();
model.addAttribute("allProvince", allProvince);
return "forward:/province_city.jsp";
}
// 獲取對(duì)應(yīng)省份的城市 JSON 數(shù)據(jù)
@RequestMapping("/cities")
@ResponseBody
public List<City> getCities(Long pid) {
return City.getCityByProvinceId(pid);
}
}
2. Province
為了讓代碼少一點(diǎn),看的更清晰些,我偽造了一些省份數(shù)據(jù),真實(shí)數(shù)據(jù)應(yīng)該是你自己從數(shù)據(jù)庫(kù)中查詢出來(lái)的,封裝成集合的形式給 Controller 調(diào)用
package com.yy.homework.domain;
import java.util.ArrayList;
import java.util.List;
public class Province {
private Long id;
private String name;
public Province() {
}
public Province(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
// 獲取所有的省份
public static List<Province> getAllProvince() {
List<Province> provinces = new ArrayList<Province>();
provinces.add(new Province(1L, "湖南"));
provinces.add(new Province(2L, "廣東"));
provinces.add(new Province(3L, "湖北"));
return provinces;
}
}
3. Province
這里是我偽造的一些城市數(shù)據(jù),真實(shí)數(shù)據(jù)應(yīng)該是你自己根據(jù)前臺(tái)頁(yè)面?zhèn)鬟^(guò)來(lái)的 省份 id 從數(shù)據(jù)庫(kù)中查詢出來(lái)的,封裝成集合的形式給 Controller 調(diào)用,返回前端界面
package com.yy.homework.domain;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @program: jQuery-test02
* @ClassName City
* @description:
* @author: YanYang
* @create: 2021-05-28 18:07
**/
public class City {
private Long id;
private String name;
public City() {
}
public City(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String toString() {
return "City [id=" + id + ", name=" + name + "]";
}
/**
* 根據(jù)省份 id 查詢省份中的城市!
* @return
*/
public static List<City> getCityByProvinceId(Long pid) {
List<City> citys = new ArrayList<City>();
if (pid == 1) {
citys = Arrays.asList(
new City(11L, "長(zhǎng)沙市"),
new City(12L, "株洲市"),
new City(13L, "湘潭市"),
new City(14L, "衡陽(yáng)市"),
new City(15L, "邵陽(yáng)市"),
new City(16L, "岳陽(yáng)市"),
new City(17L, "常德市"),
new City(18L, "張家界市")
);
} else if (pid == 2) {
citys = Arrays.asList(
new City(21L, "廣州市"),
new City(22L, "深圳市"),
new City(23L, "佛山市"),
new City(24L, "中山市"),
new City(25L, "珠海市"),
new City(26L, "汕頭市"),
new City(27L, "潮州市"),
new City(28L, "東莞市")
);
} else if (pid == 3) {
citys = Arrays.asList(
new City(31L, "孝感市"),
new City(32L, "黃岡市"),
new City(33L, "咸寧市"),
new City(34L, "恩施州"),
new City(35L, "鄂州市"),
new City(36L, "武漢市"),
new City(37L, "荊門市"),
new City(38L, "襄陽(yáng)市")
);
}
return citys;
}
}
總結(jié):
以上就是用二級(jí)聯(lián)動(dòng)的代碼了,代碼僅供參考,歡迎討論交流。
以上就是Mybatis + js 實(shí)現(xiàn)下拉列表二級(jí)聯(lián)動(dòng)的詳細(xì)內(nèi)容,更多關(guān)于Mybatis下拉列表二級(jí)聯(lián)動(dòng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題的方法詳解
在 Java 中,浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題指的是使用浮點(diǎn)數(shù)進(jìn)行運(yùn)算時(shí),由于浮點(diǎn)數(shù)的內(nèi)部表示方式和十進(jìn)制數(shù)的表示方式存在差異,導(dǎo)致計(jì)算結(jié)果可能出現(xiàn)誤差,本文就給大家介紹一下Java如何解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題,需要的朋友可以參考下2023-09-09
SpringBoot啟動(dòng)時(shí)執(zhí)行初始化操作的幾種方式
項(xiàng)目中,經(jīng)常需要在啟動(dòng)過(guò)程中初始化一些數(shù)據(jù),如從數(shù)據(jù)庫(kù)讀取一些配置初始化,或從數(shù)據(jù)庫(kù)讀取一些熱點(diǎn)數(shù)據(jù)到redis進(jìn)行初始化緩存,本文給大家介紹了SpringBoot啟動(dòng)時(shí)執(zhí)行初始化操作的幾種方式的相關(guān)資料,需要的朋友可以參考下2024-05-05
Mybatis使用collection標(biāo)簽進(jìn)行樹(shù)形結(jié)構(gòu)數(shù)據(jù)查詢時(shí)攜帶外部參數(shù)查詢
這篇文章主要介紹了Mybatis使用collection標(biāo)簽進(jìn)行樹(shù)形結(jié)構(gòu)數(shù)據(jù)查詢時(shí)攜帶外部參數(shù)查詢,需要的朋友可以參考下2023-10-10
Spring Cloud Gateway 獲取請(qǐng)求體(Request Body)的多種方法
這篇文章主要介紹了Spring Cloud Gateway 獲取請(qǐng)求體(Request Body)的多種方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Spring Boot中使用Spring-data-jpa的配置方法詳解
今天小編就為大家分享一篇關(guān)于Spring Boot中使用Spring-data-jpa的配置方法詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文
這篇文章主要介紹了Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文件的方法,需要的朋友可以參考下2015-12-12
Java?RabbitMQ消息隊(duì)列詳解常見(jiàn)問(wèn)題
消息隊(duì)列是最古老的中間件之一,從系統(tǒng)之間有通信需求開(kāi)始,就自然產(chǎn)生了消息隊(duì)列。本文告訴什么是消息隊(duì)列,為什么需要消息隊(duì)列,常見(jiàn)的消息隊(duì)列有哪些,RabbitMQ的部署和使用2022-07-07
java發(fā)送http get請(qǐng)求的兩種方式
這篇文章主要為大家詳細(xì)介紹了java發(fā)送http get請(qǐng)求的兩種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05

