You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
text1/web/WEB-INF/admin/aFindStudentList.jsp

222 lines
23 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 上述两行是JSP页面相关指令
第一行用于设置该JSP页面的内容类型为text/html即HTML格式页面同时指定字符编码为UTF-8表明页面使用Java语言来处理逻辑。
第二行引入了JSTLJavaServer Pages Standard Tag Library核心标签库定义前缀为“c”方便后续在页面中使用JSTL提供的标签进行动态数据处理比如循环遍历、条件判断等操作 -->
<html>
<head>
<title>查询学生</title>
<!-- 设置HTML页面的标题为“查询学生”此标题会显示在浏览器的标题栏让用户明确该页面的主要功能 -->
<link rel="stylesheet" href="./css/layui.css">
<!-- 引入layui框架的样式表文件通过相对路径从当前页面所在目录下的css文件夹中查找应用layui框架提供的样式用于页面布局、组件美化等使页面呈现layui框架特有的外观风格 -->
<link rel="stylesheet" href="./css/style.css">
<!-- 引入自定义的样式表文件style.css同样采用相对路径引用目的是添加符合特定需求的个性化页面样式对页面显示效果做进一步定制 -->
<script src="./layui.js"></script>
<!-- 引入layui框架的JavaScript脚本文件从当前页面所在目录获取该文件layui的JavaScript脚本为页面提供众多交互功能以及各种组件支持例如实现菜单交互、页面元素动态展示等功能 -->
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<!-- 从CDN内容分发网络引入jQuery库的最小化版本jQuery是常用的JavaScript库能简化页面中对DOM元素的操作、事件处理以及实现各种动画效果等方便开发人员编写JavaScript代码实现页面交互逻辑 -->
</head>
<body class="layui-layout-body" style="background-color: #F2F2F2">
<!-- 为页面主体body设置类名“layui-layout-body”同时将背景颜色设定为浅灰色#F2F2F2该类名通常与layui框架的布局样式相关联按照其框架规范来构建页面整体外观 -->
<jsp:include page="/filterLogin.jsp"></jsp:include>
<!-- 通过JSP的include指令包含名为filterLogin.jsp的页面内容一般这个页面用于处理用户登录相关的验证逻辑或者展示登录相关的界面元素比如登录表单等以此确保只有登录后的用户能够访问后续页面内容 -->
<jsp:include page="/WEB-INF/admin/aHeader.jsp"></jsp:include>
<!-- 包含位于WEB-INF/admin目录下的aHeader.jsp页面通常用于构建页面的头部区域可能包含如网站logo、导航栏等常见的头部元素起到统一页面头部布局的作用 -->
<jsp:include page="/WEB-INF/admin/adminNav.jsp"></jsp:include>
<!-- 再次使用JSP的include指令包含WEB-INF/admin目录下的adminNav.jsp页面此页面一般用来展示管理员端特有的导航菜单内容便于用户在不同功能模块间进行切换操作 -->
<div class="layui-layout layui-layout-admin">
<!-- 创建一个div元素并赋予其两个类名“layui-layout”和“layui-layout-admin”这是layui框架中用于定义页面整体布局结构的特定类名遵循layui框架的布局规范来划分页面不同区域例如头部、主体、侧边栏等具体根据框架设定 -->
<div class="layui-body">
<!-- 在上述布局div内部再创建一个div元素类名为“layui-body”在layui框架里该区域通常用于承载页面的主要内容比如展示各类业务数据、操作按钮等 -->
<!-- 内容主体区域 -->
<div style="padding: 15px;">
<!-- 创建一个div元素并通过内联样式设置其四周内边距为15px这样做主要是为了对内部元素进行排版使页面内容看起来更规整避免显得过于紧凑或松散 -->
<span class="layui-breadcrumb">
<a href="">管理员</a>
<a href="">学生管理</a>
<a><cite>查询学生</cite></a>
</span>
<!-- 创建一个layui框架提供的面包屑导航组件通过一系列超链接a标签展示当前页面在整个系统中的层级路径这里展示了从“管理员”进入“学生管理”再到“查询学生”页面但目前超链接的href属性大多为空后续可能需要完善具体跳转地址以实现页面导航功能 -->
<form style="padding-top: 20px;" action="${pageContext.request.contextPath}/findStudentByPageServlet" method="post">
<!-- 创建一个表单form元素通过内联样式设置顶部内边距为20px设置表单的action属性即表单提交的目标地址为名为findStudentByPageServlet的Servlet通过EL表达式动态获取上下文路径拼接而成提交方式为POST用于收集用户输入的查询条件并提交给后端进行学生信息查询操作 -->
<div class="layui-form-item">
<!-- 创建一个layui框架下用于表示表单项目form-item的div容器layui框架会依据这个结构来对内部的表单元素进行布局和样式处理 -->
<div class="layui-inline">
<!-- 创建一个内联的div容器在layui表单布局中它用于让内部的表单元素在同一行显示 -->
<label class="layui-form-label" style="width: auto;">学号</label>
<!-- 创建一个表单标签label元素用于标识后面的输入框对应的含义这里显示文本为“学号”并通过内联样式设置宽度为自适应width: auto -->
<div class="layui-input-inline">
<!-- 创建一个用于放置输入框的内联div容器在layui框架的表单布局里它控制着输入框的显示样式及宽度等 -->
<input type="tel" name="s_id" value="${condition.s_id[0]}" autocomplete="off" class="layui-input">
<!-- 创建一个文本输入框input元素类型为电话号码type: tel名称为“s_id”其值通过EL表达式从名为“condition”的对象中获取学号信息进行回显可能是上次查询输入的学号用于保留历史查询条件关闭自动完成功能autocomplete="off"并应用layui框架的输入框样式类layui-input用于让用户输入要查询的学生学号 -->
</div>
<label class="layui-form-label" style="width: auto;">姓名</label>
<div class="layui-input-inline">
<input type="text" name="s_name" value="${condition.s_name[0]}" autocomplete="off" class="layui-input">
<!-- 同样创建一个文本输入框类型为文本type: text名称为“s_name”通过EL表达式回显上次输入的姓名信息关闭自动完成功能用于让用户输入要查询的学生姓名 -->
</div>
<div class="layui-input-inline">
<button type="submit" class="layui-btn">查询</button>
<!-- 创建一个提交按钮button类型为提交type: submit应用layui框架的按钮样式类layui-btn点击该按钮会触发表单提交操作将用户在学号和姓名输入框中输入的查询条件发送到指定的Servlet进行学生信息查询 -->
<a class="layui-btn layui-btn-danger" href="javascript:void(0);" id="deleteSelectStudent">删除选中</a>
<!-- 创建一个超链接a标签应用layui框架的危险样式按钮类layui-btn layui-btn-danger表示红色警示样式按钮设置href属性为“javascript:void(0);”使其点击时不进行实际的页面跳转设置id为“deleteSelectStudent”用于后续绑定JavaScript事件实现删除选中学生信息的功能 -->
</div>
</div>
</div>
</form>
<form id="selectStudent" action="${pageContext.request.contextPath}/deleteSelectStudentServlet" method="post">
<!-- 创建另一个表单元素设置id为“selectStudent”用于标记这个表单其action属性设置为提交到名为deleteSelectStudentServlet的Servlet通过EL表达式获取上下文路径拼接而成提交方式为POST该表单主要用于批量删除选中的学生信息 -->
<table class="layui-table" lay-filter="test">
<!-- 创建一个layui框架的表格组件设置名为“test”的过滤器该过滤器可在后续JavaScript代码中用于配置表格相关交互功能例如实现表格行点击事件、数据筛选、排序等操作 -->
<thead>
<tr>
<th><input id="firstCb" type="checkbox" class="my-checkbox" name="" title="" lay-skin="primary"></th>
<th>ID</th>
<th>学号</th>
<th>学院</th>
<th>系别</th>
<th>班级</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>城市</th>
<th>手机号</th>
<th>邮箱</th>
<th>操作</th>
<!-- 定义表格头部的列标题分别列出要展示的学生相关的各个字段如全选复选框通过一个带有特定样式和属性的input复选框实现、序号ID、学号、学院、系别、班级、姓名、性别、年龄、城市、手机号、邮箱以及操作用于进行修改、删除等相关操作 -->
</tr>
</thead>
<c:forEach items="${pb.list}" var="student" varStatus="s">
<!-- 使用JSTL的forEach标签进行循环遍历操作循环的对象是名为“pb.list”的数据集合通常是从后端传递过来的分页后的学生信息列表每次循环将当前元素赋值给变量“student”同时利用“varStatus”获取循环状态信息如当前循环次数等并赋值给变量“s” -->
<tr>
<th><input type="checkbox" class="my-checkbox" name="sid" value="${student.s_id}" title="" lay-skin="primary"></th>
<td>${s.count}</td>
<td>${student.s_id}</td>
<td>${student.s_college}</td>
<td>${student.s_department}</td>
<td>${student.s_class}</td>
<td>${student.s_name}</td>
<td>${student.s_sex}</td>
<td>${student.s_age}</td>
<td>${student.s_address}</td>
<td>${student.s_phone}</td>
<td>${student.s_email}</td>
<td><a class="layui-btn layui-btn-normal" href="${pageContext.request.contextPath}/updateStudentServlet?sid=${student.s_id}">修改</a><a class="layui-btn layui-btn-danger" href="javascript:deleteStudent(${student.s_id});">删除</a></td>
<!-- 在表格的每一行中通过EL表达式Expression Language如${s.count}等)分别展示对应的数据:
先创建一个复选框input类型为checkbox设置类名、名称、值以及相关样式属性用于单独选中某一行学生信息以便进行批量操作如批量删除
然后依次展示学生的序号(通过${s.count}表示当前循环次数)、学号、学院、系别、班级、姓名、性别、年龄、城市、手机号、邮箱等具体信息;
最后一列创建两个超链接a标签分别应用layui框架的不同样式按钮类一个是常规样式layui-btn layui-btn-normal用于跳转到修改学生信息的页面通过拼接学生ID参数传递给对应的Servlet另一个是危险样式layui-btn layui-btn-danger点击后会调用名为deleteStudent的JavaScript函数并传递当前学生的ID作为参数用于删除当前行对应的学生信息 -->
</tr>
</c:forEach>
</table>
</form>
<%-- <div class="layui-box layui-laypage layui-laypage-default" id="layui-laypage-1"><a href="javascript:;" class="layui-laypage-prev" data-page="3">上一页</a><a href="javascript:;" data-page="1">1</a><a href="javascript:;" data-page="2">2</a><a href="javascript:;" data-page="3">3</a><span class="layui-laypage-curr"><em class="layui-laypage-em"></em><em>4</em></span><a href="javascript:;" data-page="5">5</a><a href="javascript:;" class="layui-laypage-next" data-page="5">下一页</a></div>--%>
<ul>
<!-- 创建一个无序列表ul元素用于构建分页导航链接 -->
<c:if test="${pb.currentPage == 1}">
<a href ="javascript:return false;">
<!-- 使用JSTL的条件判断标签c:if当名为“pb”的对象中的当前页码currentPage等于1时创建一个超链接a标签设置href属性为“javascript:return false;”,使其点击时不执行实际的页面跳转,用于禁用上一页链接(因为已经是第一页了) -->
</c:if>
<c:if test="${pb.currentPage!= 1}">
<a href="${pageContext.request.contextPath}/findStudentByPageServlet?currentPage=${pb.currentPage-1}&rows=5&s_id=${condition.s_id[0]}&s_name=${condition.s_name[0]}">
<!-- 当当前页码不等于1时创建一个超链接链接地址指向名为findStudentByPageServlet的Servlet并通过EL表达式动态传递当前页码减1、每页显示行数、学号查询条件、姓名查询条件等参数用于跳转到上一页的学生信息查询结果页面 -->
</c:if>
<li class="page-li">上一页</li></a>
<!-- 创建一个列表项li元素应用“page-li”类名可能对应特定样式显示文本为“上一页”作为分页导航中的上一页按钮文本 -->
</a>
<c:forEach begin="1" end="${pb.totalPage}" var="i">
<!-- 使用JSTL的forEach标签进行循环从1开始到总页数totalPage结束每次循环变量为“i”用于生成页码导航链接 -->
<c:if test="${pb.currentPage == i}">
<a href="${pageContext.request.contextPath}/findStudentByPageServlet?currentPage=${i}&rows=5&s_id=${condition.s_id[0]}&s_name=${condition.s_name[0]}"><li class="page-li" style="background-color: #009688;border-radius: 2px;color: white;">${i}</li></a>
<!-- 当当前页码等于循环中的页码“i”时创建一个超链接链接地址同样指向findStudentByPageServlet并传递相关参数内部包含一个列表项元素应用“page-li”类名并通过内联样式设置背景颜色、边框圆角和文本颜色显示当前页码用于突出显示当前所在页码 -->
</c:if>
<c:if test="${pb.currentPage!= i}">
<a href="${pageContext.request.contextPath}/findStudentByPageServlet?currentPage=${i}&rows=5&s_id=${condition.s_id[0]}&s_name=${condition.s_name[0]}"><li class="page-li">${i}</li></a>
<!-- 当当前页码不等于循环中的页码“i”时创建类似的超链接和列表项元素只是列表项元素的样式为普通样式用于显示其他页码链接 -->
</c:if>
</c:forEach>
<c:if test="${pb.currentPage == pb.totalPage}">
<a href="javascript:return false;">
<!-- 当当前页码等于总页数时创建一个超链接设置href属性使其点击不跳转用于禁用下一页链接因为已经是最后一页了 -->
</c:if>
<c:if test="${pb.currentPage!= pb.totalPage}">
<a href="${pageContext.request.contextPath}/findStudentByPageServlet?currentPage=${pb.currentPage+1}&rows=5&s_id=${condition.s_id[0]}&s_name=${condition.s_name[0]}">
<!-- 当当前页码不等于总页数时创建超链接链接地址指向findStudentByPageServlet并传递当前页码加1等参数用于跳转到下一页的学生信息查询结果页面 -->
</c:if>
<li class="page-li">下一页</li></a>
<!-- 创建列表项元素,显示文本为“下一页”,作为分页导航中的下一页按钮文本 -->
</ul>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 0px;">
<legend>共${pb.totalCount}条记录,共${pb.totalPage}页</legend>
<!-- 创建一个字段集fieldset元素应用layui框架的相关样式类设置顶部外边距为0px内部包含一个图例legend元素通过EL表达式显示总记录数totalCount和总页数totalPage用于向用户展示学生信息查询结果的统计情况让用户清楚知晓数据的总量以及分页的情况 -->
</fieldset>
<jsp:include page="/footer.jsp"></jsp:include>
<!-- 包含名为footer.jsp的页面一般此页面用于展示页面底部的一些通用信息比如版权声明、网站相关链接、联系方式等内容 -->
</div>
</div>
</div>
<script type="text/javascript">
$("#nav li:nth-child(2) dl dd:nth-child(1)").addClass("layui-this");
// 使用jQuery选择器选中页面中id为“nav”的元素下的第2个子元素li下的dl元素下的第1个dd元素并为其添加类名“layui-this”。在layui框架中添加这个类名通常意味着将对应的导航菜单项标记为当前选中状态使其呈现特定的样式比如改变颜色、加粗等以此表明当前所在页面功能模块对应的菜单选项
$("#nav li:nth-child(2)").addClass("layui-nav-itemed");
// 同样使用jQuery选择器选中页面中id为“nav”的元素下的第2个子元素li并为其添加类名“layui-nav-itemed”。在layui框架里这个类名可能用于控制导航菜单的展开或折叠状态让对应的菜单层级结构展示相应的效果方便用户查看相关的子菜单
</script>
<script>
//JavaScript代码区域
layui.use('element', function(){
var element = layui.element;
element.init();
// 使用layui框架的element模块调用其init方法进行初始化操作。在layui框架中element模块提供了很多页面元素交互相关的功能例如实现页面布局动态切换、菜单展开收起等交互效果通过调用init方法可以激活这些功能确保页面上基于element模块构建的各种UI组件能够正常工作
});
</script>
<script>
function deleteStudent(s_id) {
if (confirm("你确定删除该学生吗?")) {
location.href = "${pageContext.request.contextPath}/deleteStudentServlet?s_id=" + s_id;
// 定义一个名为deleteStudent的函数接收学生的IDs_id作为参数。在函数内部通过JavaScript的confirm函数弹出一个确认框询问用户是否确定要删除该学生。当用户点击确定即confirm函数返回true使用location.href属性将页面重定向到名为deleteStudentServlet的Servlet并通过URL拼接的方式传递要删除的学生的ID参数从而触发后端对应的删除学生信息的逻辑
}
}
window.onload = function () {
document.getElementById("deleteSelectStudent").onclick = function () {
var flag = false;
var cbs = document.getElementsByName("sid");
for (var i = 0; i < cbs.length; i++) {
if (cbs[i].checked) {
// 为id为“deleteSelectStudent”的元素也就是页面上的“删除选中”按钮绑定点击事件处理函数。在函数内部首先定义一个标志变量flag并初始化为false然后通过document.getElementsByName获取所有名为“sid”的元素即表格中每行学生对应的复选框接着循环遍历这些复选框当有任何一个复选框被选中即其checked属性为true将flag设置为true并跳出循环
flag = true;
break;
}
}
if (flag) {
if (confirm("你确定要删除选中条目吗?")) {
document.getElementById("selectStudent").submit();
// 如果有复选框被选中即flag为true则再次弹出确认框询问用户是否确定要删除选中的条目。当用户确认后通过document.getElementById获取id为“selectStudent”的表单元素并调用其submit方法触发表单提交操作将选中的学生信息通过表单中复选框的name和value属性传递选中学生的ID等相关数据发送到对应的Servlet前面设置的action为deleteSelectStudentServlet以进行批量删除操作
}
}
}
document.getElementById("firstCb").onclick = function () {
var cbs = document.getElementsByName("sid");
for (var i = 0; i < cbs.length; i++) {
cbs[i].checked = this.checked;
// 为id为“firstCb”的元素即表格头部的全选复选框绑定点击事件处理函数。在函数内部先获取所有名为“sid”的复选框元素然后循环遍历它们将每个复选框的checked属性设置为与全选复选框this表示当前点击的元素也就是“firstCb”的checked属性一致以此实现全选或全不选的功能
}
}
}
</script>
</body>
</html>