Mybatis + js 實現(xiàn)下拉列表二級聯(lián)動效果
一、業(yè)務(wù)需求
實現(xiàn)省份與城市的二級聯(lián)動
二、實現(xiàn)效果
三、代碼實現(xiàn)
1. province_city.jsp
前端界面實現(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>二級聯(lián)動</title> <script src="/static/jQuery-1.11/jquery-1.11.3.min.js"></script> <script> // 頁面加載完畢執(zhí)行 $(function () { let $p = $('#p'); let $c = $('#c'); // 給省份下拉框綁定值改變事件處理函數(shù),當(dāng)省份下拉框選項改變了,就發(fā)送請求獲取這個省份對應(yīng) // 城市數(shù)據(jù),拿到數(shù)據(jù)再使用 DOM 顯示在城市下拉框中 $p.change(function () { // 獲取被選中省份下拉框的 option 的 value 屬性值,即省份 id 值 let pid = $(this).val(); // 清除舊有子元素(每次改變省份需要清除城市元素,否則城市元素會一直添加) $c.empty(); // 請選擇也被清除了,所以需要添加回來 $c.append('<option value="-1">請選擇</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">請選擇</option> <!-- 遍歷后臺傳過來的省份集合 --> <c:forEach items="${allProvince}" var="province"> <option value="${province.id}">${province.name}</option> </c:forEach> </select> 城市:<select id="c"> <option value="-1">請選擇</option> </select> </body> </html>
2. TwoController
后臺處理方法
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"; } // 獲取對應(yīng)省份的城市 JSON 數(shù)據(jù) @RequestMapping("/cities") @ResponseBody public List<City> getCities(Long pid) { return City.getCityByProvinceId(pid); } }
2. Province
為了讓代碼少一點,看的更清晰些,我偽造了一些省份數(shù)據(jù),真實數(shù)據(jù)應(yīng)該是你自己從數(shù)據(jù)庫中查詢出來的,封裝成集合的形式給 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ù)據(jù)應(yīng)該是你自己根據(jù)前臺頁面?zhèn)鬟^來的 省份 id 從數(shù)據(jù)庫中查詢出來的,封裝成集合的形式給 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, "長沙市"), new City(12L, "株洲市"), new City(13L, "湘潭市"), new City(14L, "衡陽市"), new City(15L, "邵陽市"), new City(16L, "岳陽市"), 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, "襄陽市") ); } return citys; } }
總結(jié):
以上就是用二級聯(lián)動的代碼了,代碼僅供參考,歡迎討論交流。
以上就是Mybatis + js 實現(xiàn)下拉列表二級聯(lián)動的詳細內(nèi)容,更多關(guān)于Mybatis下拉列表二級聯(lián)動的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Security和自定義filter的沖突導(dǎo)致多執(zhí)行的解決方案
這篇文章主要介紹了Spring Security和自定義filter的沖突導(dǎo)致多執(zhí)行的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Java數(shù)據(jù)結(jié)構(gòu)及算法實例:漢諾塔問題 Hanoi
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實例:漢諾塔問題 Hanoi,本文直接給出實現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下2015-06-06SpringMVC Restful api接口實現(xiàn)的代碼
本篇文章主要介紹了SpringMVC Restful api接口實現(xiàn)的代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09springboot集成shiro權(quán)限管理簡單實現(xiàn)
這篇文章主要介紹了springboot集成shiro權(quán)限管理簡單實現(xiàn),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08解決spring cloud服務(wù)啟動之后回到命令行會自動掛掉問題
這篇文章主要介紹了解決spring cloud服務(wù)啟動之后回到命令行會自動掛掉問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Java利用SpEL表達式實現(xiàn)權(quán)限校驗
這篇文章主要為大家詳細介紹了Java如何利用SpEL表達式實現(xiàn)權(quán)限校驗功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01java定位死鎖的三種方法(jstack、Arthas和Jvisualvm)
這篇文章主要給大家介紹了關(guān)于java定位死鎖的三種方法,分別是通過jstack定位死鎖信息、通過Arthas工具定位死鎖以及通過 Jvisualvm 定位死鎖,文中還介紹了死鎖的預(yù)防方法,需要的朋友可以參考下2021-09-09