【Web开发】级联查询(Ajax/ jQuery/ Servlet)

实现级联查询

共有两个下拉框,第一级为学院,第二级为学院开设的科目。
实现的功能为:当改变学院的选择,第二级下拉框需变为对应学院开设的科目内容。

结果预览:
在这里插入图片描述
在这里插入图片描述

jsp页面

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title><script type="text/javascript" src="js/jquery-3.6.0.min.js"></script><script type="text/javascript" src="js/index.js"></script>
</head>
<body>
学院:
<select name="academy" id="select-academy"></select>
科目:
<select name="subject" id="select-subject"></select>
</body>
</html>

其中导入了jQuery的脚本,下面将会使用jQuery语法编写脚本

JS脚本

实现级联查询的核心代码:

var $select_academy = $("#select-academy");
var $select_subject = $("#select-subject");$select_academy.change(function () {var selected_academy_id = $("#select-academy>option:selected").val();$.get("subjectField", {"academyId":selected_academy_id}, function (resp) {$select_subject.empty();$.each(resp, function (i, e) {$select_subject.append("<option value='"+e.id+"'>"+e.name+"</option>");});}, "json");
});
  1. 监听学院下拉框选择发生改变change
  2. 获取被选中(selected)的学院的value值即学院的id
  3. 以get方式发送ajax请求,参数为学院id号academyId
  4. 首先将科目下拉框原有内容清空empty
  5. 再向其中添加append被选中的学院对应开设的科目集,resp为服务器端返回的数据,格式为json数组

Servlet

package com.exposerain.controller;import com.exposerain.dao.SubjectDao;
import com.exposerain.entity.Subject;
import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;public class SubjectFieldServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {SubjectDao dao = new SubjectDao();Integer academyId = Integer.valueOf(request.getParameter("academyId"));List<Subject> list = dao.field(academyId);//jackson.jarObjectMapper om = new ObjectMapper();String json = om.writeValueAsString(list);response.setContentType("application/json;charset=utf-8");PrintWriter out = response.getWriter();out.println(json);out.flush();out.close();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
  1. 从请求对象中获取参数academyId的值作为学院id号
  2. 根据学院id号获取对应开设的科目列表list(DAO中方法具体见下文)
  3. 将科目列表转化为json格式的字符串(这里采用的是jackson.jar包里的方法)
  4. 设置响应对象文本格式并发送json字符串

DAO

SubjectDao

package com.exposerain.dao;import com.exposerain.entity.Subject;
import com.exposerain.util.JdbcUtil;import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class SubjectDao {private JdbcUtil util = new JdbcUtil();public List<Subject> field(Integer academyId){List<Subject> list = new ArrayList<>();String sql = "select * from Subject where acId = ?";PreparedStatement ps = util.createStatement(sql);ResultSet rs = null;try {ps.setInt(1,academyId);rs = ps.executeQuery();while(rs.next()){Integer id = rs.getInt("subId");String name = rs.getString("subName");Integer acId = rs.getInt("acId");Subject subject = new Subject(id, name, acId);list.add(subject);}} catch (SQLException throwables) {throwables.printStackTrace();} finally {util.close(rs);}return list;}
}

其中的JdbcUtil为JDBC工具类用于连接数据库、发送SQL命令至数据库等功能,不再赘述。

初始化

目前直接进入网页两级的下拉框都还是空的,因此要对其进行初始化。

var $select_academy = $("#select-academy");
var $select_subject = $("#select-subject");
var selected_academy_id = null;
//初始化学院下拉框
$.ajax({url:"academyField",async:false, //同步success:function (resp) {$.each(resp, function (i, e) {$select_academy.append("<option value='"+e.id+"'>"+e.name+"</option>");});$select_academy.children().eq(0).attr("selected", "true");},dataType:"json"
});
selected_academy_id = $("#select-academy>option:selected").val();
$.get("subjectField", {"academyId":selected_academy_id}, function (resp) {$.each(resp, function (i, e) {$select_subject.append("<option value='"+e.id+"'>"+e.name+"</option>");});
}, "json");
//初始化完毕
  1. 首先发送ajax请求加载出第一级学院下拉框,再将其中的首个学院选中,由于要根据选中的元素提取value值作为学院id号,因此选中操作必须在提取操作之前执行,因此采用同步async:false)的方式发送请求,同步的方式缺点是速度慢,第二级下拉框肉眼可见地比第一级加载慢一瞬间(这里可以将提取操作改为直接赋被选中的学院的id确值即selected_academy_id = 1;然后便可用异步的方式请求,不过可维护性差一点)
  2. 接着是将级联查询静态执行一遍用于初始化加载科目下拉框

初始页面:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net treeView绑定

这个东西不是什么复杂的东西&#xff0c; 帮着小兄弟写个Demo, 实现个Binding public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bind(); } } priv…

关于TOmcat的一些小小的知识

web.xml中的url-pattern和form 表单中的action是相同的。form 表单中的action声明的并不是servlet的名字 例&#xff1a; <servlet> <servlet-name>welcome</servlet-name> <servlet-class>WelcomeYou</servlet-class> </servlet> <ser…

Java文件类字符串getAbsolutePath()方法(带示例)

文件类字符串getAbsolutePath() (File Class String getAbsolutePath()) This method is available in package java.io.File.getAbsolutePath(). 软件包java.io.File.getAbsolutePath()中提供了此方法。 This method is used to return the absolute path of the file object …

远控免杀专题(15)-DKMC免杀

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

面向对象(静态成员内部类的调用)

class beyond{public static void main(String []args){//外部类名.内部类名 对象名 外部类名.内部类对象(new 内部类名)/*Outer.Inner yy Outer.new Inner(); 类里面有个非静态方法&#xff0c;需要new创建Inner对象;正常的形式是这样的&#xff0c;但是我们习惯将new放在前…

SQL——以面向集合的思维方式来思考

本文来自&#xff1a;http://www.ituring.com.cn/article/details/472 为了以有趣的方式更好地帮助你形成面向集合的思维方式&#xff0c;我将给出自己最喜欢的游戏之一——集合。你可以在线玩这个游戏&#xff0c;网址是www.setgame.com/puzzle/set.htm&#xff0c;每天都会贴…

转载: 统计图控件NetCharting 和ZedGraph的比较

原文出处&#xff1a;http://hi.baidu.com/goga/blog/item/07b3024f61b8cd35aec3ab47.html最近考察了几个统计图表控件包&#xff0c;开源的有ZedGraph&#xff0c;Nplot等&#xff0c;但是相比之下还是ZedGraph强大&#xff0c;方便一些&#xff0c;其他的感觉还是半成品。收费…

【汇编语言】状态标志符(CF/OF/SF/ZF)在运算(ADD/SUB/ADC/SBB)过程中的响应变化

目录各类运算时状态标志的响应变化标志符在各种ADD运算下的响应情况标志符在各种SUB运算下的响应情况借助标志符实现多位数之间运算ADC(add with carry)带进位加法指令SBB(subtract with borrow)带借位减法指令各类运算时状态标志的响应变化 标志符具体含义CF&#xff08;Carr…

Java集合unmodifiableSortedSet()方法(带示例)

集合类unmodifiableSortedSet()方法 (Collections Class unmodifiableSortedSet() method) unmodifiableSortedSet() method is available in java.util package. unmodifiableSortedSet()方法在java.util包中可用。 unmodifiableSortedSet() method is used to get a non-modi…

远控免杀专题(16)-Unicorn免杀

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

面向对象(匿名内部类在开发中的应用)

匿名内部类在开发中的应用 public class test1_NoNameInner {public static void main(String[] args) {PersonDemo yy new PersonDemo();//yy.method(new Student());yy.method(new Person() {public void show(){System.out.println("show");}});//匿名内部类当作…

【汇编语言】乘法(MUL/IMUL)

乘法&#xff08;MUL/IMUL&#xff09; 目录乘法&#xff08;MUL/IMUL&#xff09;IMUL(signed multiply)有符号数乘法MUL(unsigned multiply)无符号数乘法麻&#xff01;属实是被这个有符号乘法给整麻了&#xff0c;教材就一行例子直接不解释了&#xff0c;关于标志位溢出的一…

【转】MFC学习总结

HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if ((pWnd->GetDlgCtrlID() IDC_EDIT1) && (nCtlColor CTLCOLOR_EDIT)) {   COLORREF clr RGB(255,0,0);   pDC->SetTextColor(clr);  //设置红色的文本   clr RGB(0,0,0…

NHibernate初学体验进阶篇

在上篇《NHibernate初学体检记》中&#xff0c;我参照NHibernate官方快速指南写了两个示例项目&#xff0c;在示例2的源码中充斥了如下类似的代码&#xff1a;<?XML:NAMESPACE PREFIX O />Configuration cfg new Configuration(); cfg.AddAssembly("…

eclipse快捷键

Java开发工具(Eclipse的视窗和视图概述) A:视窗 每一个基本的窗体被称为视窗 PackageExplorer 显示项目结构&#xff0c;包&#xff0c;类&#xff0c;及资源Outline 显示类的结构&#xff0c;方便查找&#xff0c;识别&#xff0c;修改Console 程序运行的结果在该窗口显示Hie…

【汇编语言】除法(DIV/IDIV)

除法&#xff08;DIV/IDIV&#xff09; 目录除法&#xff08;DIV/IDIV&#xff09;DIV(unsigned divide)无符号数除法IDIV(signed divide)有符号数除法DIV(unsigned divide)无符号数除法 格式&#xff1a;DIV SRC 操作&#xff1a; SRCSRCSRC为字节时&#xff0c;(AL)←(AX)/…

java 方法 示例_Java集合syncedSortedSet()方法与示例

java 方法 示例集合类SynchronizedSortedSet()方法 (Collections Class synchronizedSortedSet() method) synchronizedSortedSet() method is available in java.util package. java.util软件包中提供了sharedSortedSet ()方法 。 synchronizedSortedSet() method is used to …

远控免杀专题(17)-Python-Rootkit免杀

免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全家桶…

项目管理软件应用浅析(转)

项目管理是在一定的约束条件下&#xff0c;以高效率地实现项目业主的目标为目的&#xff0c;以项目经理个人负责制为基础和以项目为独立实体进行经济核算&#xff0c;并按照项目内在的逻辑规律进行有效的计划、组织、协调、控制的系统管理活动。项目管理的核心技术是网络计划技…

斜视角的讨论(转)

http://school.ogdev.net/listshow.asp?page4&typeid0&categoryid5&id0&ListType2 目 录 1.1 地图和地表 1.2 斜视角游戏中的视角 1.3 Tile图片的拼接 1.4 不同地表间的过渡 1.5 地图数据结构的定义 --------------------------------------------------…