2021_01_11_实习实训_day07_员工后台管理项目_编辑功能以及分页查询功能
实习实训
- 项目empManeger_2021
- 编辑功能
- 前台实现
- 编辑按钮
- 获取学生信息
- 返回前台
- 后台实现
- 相关数据库接口与方法
- 数据库接口方法 getEmpByEmpno声明
- 数据库接口方法 editEmp声明
- 数据库接口方法getEmpByEmpno实现
- 数据库接口方法 editEmp实现
- 相关业务逻辑层声明与实现
- 业务逻辑getEmpByEmpno声明
- 业务逻辑editEmp声明
- 业务逻辑getEmpByEmpno实现
- 业务逻辑editEmp实现
- 相关Servlet实现
- GetEmpByEmpnoServlet
- EditServlet
- 分页查询功能
- 前台实现
- 后台实现
- 数据库接口方法getEmpByPag声明
- 数据库接口方法getEmpByPag实现
- 业务逻辑getEmpByPage声明
- 业务逻辑getEmpByPage实现
- GetAllEmpServlet
项目empManeger_2021
编辑功能
前台实现
编辑按钮
- 在员工列表页面empList.jsp加入编辑按钮,通过编辑按钮的点击事件跳转到编辑页面进行编辑。
<input type="button" class="btn btn-primary" value="编辑" onclick="editEmp()"/>
//编辑员工function editEmp(){//用户如果没有选择记录,那么给出提出var isChk = false;//用于存储用户所选中的记录数var chk_num = 0;//用于存储被选中的员工编号var empno = "";var arrChk = document.getElementsByName("chk");for(var i=0; i<arrChk.length; i++){if(arrChk[i].checked){//当前复选框被选中isChk = true;chk_num ++;empno = arrChk[i].value;}}if(!isChk){alert("请选择要编辑的员工信息");//结束当前方法,结束编辑的动作return;}//如果用户多选,那么提示用户只能选择一条进行修改if(chk_num > 1){alert("只能选择一条记录进行修改操作");return;}//以上两种都不满足,那么可以进行编辑操作//需要单独打开员工编辑的页面进行信息的修改//这里不能直接跳转编辑页面,因为编辑页面没有任何的员工信息//我们需要先获取这个员工的全部信息,传递到编辑页面中//我们去数据库中获取当前员工的全部信息window.location.href = "GetEmpByEmpnoServlet?empno=" + empno;}
获取学生信息
- 先跳转到后台GetEmpByEmpnoServlet获取被勾选的学生的信息,然后再跳转到员工信息编辑页面editEmp.jsp。
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2021/1/11Time: 8:57To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>员工编辑</title>
</head>
<body>
<div style="float:right;">当前用户:${uname}</div>
<div align="center"><h4>编辑员工信息</h4><form action="EditServlet" method="post"><table><tr><td align="right">员工姓名:</td><td><input type="hidden" name="empno" value="${emp.empno}"><input type="text" name="ename" size="16px" value="${emp.ename}"></td></tr><tr><td>员工性别:</td><td><c:if test="${emp.sex == '男' or emp.sex == '' or emp.sex == null}"><input type="radio" name="sex" value="男" checked> 男<input type="radio" name="sex" value="女"> 女</c:if><c:if test="${emp.sex == '女'}"><input type="radio" name="sex" value="男" > 男<input type="radio" name="sex" value="女" checked> 女</c:if></td></tr><tr><td align="right">员工工作:</td><td><%--设置隐藏域用来存储员工的工作--%><input type="hidden" id="jobStr" value="${emp.job}"><select name="job" id="jobSel"><option value="coder">coder</option><option value="行政">行政</option><option value="销售">销售</option><option value="市场">市场</option></select></td></tr><tr><td align="right">入职日期:</td><td><input type="date" name="hiredate" value="${emp.hiredate}"></td></tr><tr><td colspan="2" align="center"><input type="submit" class="btn btn-primary" value="确定"><input type="button" class="btn" value="取消" onclick="cancel()"></td></tr></table></form>
</div><%--获取后台传递来的msg提示信息--%>
<%--隐藏域,页面中不显示,用它来接收后台传递的msg提示信息--%>
<input id="msg" type="hidden" value="${msg}"><script>//window.onload只能出现一次window.onload = function () {//获取工作隐藏域的value值var job = document.getElementById("jobStr").value;//根据job的值决定下拉框选择哪一个document.getElementById("jobSel").value = job;//展示提示信息var msg = document.getElementById("msg").value;if(msg != "" && msg != null){alert(msg);}}function cancel(){//跳转回到员工列表页面//真正要跳转的是后台的GetAllEmpServlet//直接修改浏览器访问路径即可window.location.href = "GetAllEmpServlet";}</script></body>
</html>
返回前台
- 最后将表单提交给后台EditServlet,通过后台将数据库中的信息更改。最后若编辑成功则通过GetAllEmpServlet将编辑好的信息带回到前台empList.jsp。
后台实现
相关数据库接口与方法
数据库接口方法 getEmpByEmpno声明
Emp getEmpByEmpno(int empno);
数据库接口方法 editEmp声明
int editEmp(Emp emp);
数据库接口方法getEmpByEmpno实现
@Overridepublic Emp getEmpByEmpno(int empno) { //Connection conn = DBUtil.getConn();Emp emp = null;PreparedStatement pst = null;ResultSet rs = null;String sql = "select * from employee where empno = ?";try {pst = conn.prepareStatement(sql);pst.setInt(1,empno);rs = pst.executeQuery();if(rs.next()){emp = new Emp();emp.setEmpno(rs.getInt("empno"));emp.setEname(rs.getString("ename"));emp.setJob(rs.getString("job"));emp.setHiredate(rs.getString("hiredate"));emp.setSex(rs.getString("sex"));}} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.closeAll(conn,pst,rs);}return emp;}
数据库接口方法 editEmp实现
@Overridepublic int editEmp(Emp emp) {Connection conn = DBUtil.getConn();int num = 0;PreparedStatement pst = null;String sql = "update employee set ename = ?,job = ?,hiredate = ?,sex = ? where empno = ?";try {pst = conn.prepareStatement(sql);pst.setString(1,emp.getEname());pst.setString(2,emp.getJob());pst.setString(3,emp.getHiredate());pst.setString(4,emp.getSex());pst.setInt(5,emp.getEmpno());num = pst.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.closeAll(conn,pst,null);}return num;}
相关业务逻辑层声明与实现
业务逻辑getEmpByEmpno声明
Emp getEmpByEmpno(String empno);
业务逻辑editEmp声明
int editEmp(Emp emp);
业务逻辑getEmpByEmpno实现
@Overridepublic Emp getEmpByEmpno(String empno) {//将String类型转换为int类型int empnoInt = Integer.parseInt(empno);return empDao.getEmpByEmpno(empnoInt);}
业务逻辑editEmp实现
@Overridepublic int editEmp(Emp emp) {return empDao.editEmp(emp);}
相关Servlet实现
GetEmpByEmpnoServlet
package com.wangbiao.emp.servlet;import com.wangbiao.emp.model.Emp;
import com.wangbiao.emp.service.IEmpService;
import com.wangbiao.emp.service.impl.EmpServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/GetEmpByEmpnoServlet")
public class GetEmpByEmpnoServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取前台传递的员工编号String empno = request.getParameter("empno");//调用service,实现查询功能IEmpService empService = new EmpServiceImpl();Emp emp = empService.getEmpByEmpno(empno);//我们获取到的emp对象中已经包含了该员工的全部信息if(emp != null){//将emp对象响应到编辑页面,并在编辑页面展示员工信息request.setAttribute("emp",emp);request.getRequestDispatcher("editEmp.jsp").forward(request,response);}else{request.setAttribute("msg","获取员工信息失败");request.getRequestDispatcher("GetAllEmpServlet").forward(request,response);}}
}
EditServlet
package com.wangbiao.emp.servlet;import com.wangbiao.emp.model.Emp;
import com.wangbiao.emp.service.IEmpService;
import com.wangbiao.emp.service.impl.EmpServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/EditServlet")
public class EditServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理字符集编码request.setCharacterEncoding("utf-8");String empno = request.getParameter("empno");String ename = request.getParameter("ename");String job = request.getParameter("job");String hiredate = request.getParameter("hiredate");String sex = request.getParameter("sex");//将empno转换为int类型int empnoInt = Integer.parseInt(empno);//封装员工对象Emp emp = new Emp();emp.setEmpno(empnoInt);emp.setEname(ename);emp.setSex(sex);emp.setHiredate(hiredate);emp.setJob(job);//调用serviceIEmpService empService = new EmpServiceImpl();int num = empService.editEmp(emp);if(num > 0){request.setAttribute("msg","信息修改成功");request.getRequestDispatcher("GetAllEmpServlet").forward(request,response);}else{request.setAttribute("msg","服务器错误");request.getRequestDispatcher("GetEmpByEmpnoServlet?empno=" + empno).forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}
分页查询功能
前台实现
- 在empList.jsp中加入页码按钮,通过页码的点击事件以及插叙条件来切换不同页的员工信息。
<c:if test="${currPage == 1}"><button onclick="prev('${currPage}')" class="btn btn-primary" disabled>上一页</button></c:if><c:if test="${currPage != 1}"><button onclick="prev('${currPage}')" class="btn btn-primary">上一页</button></c:if><c:forEach var="pageIndex" begin="1" end="${totalPage}" step="1"><button onclick="queryPage('${pageIndex}')" class="btn btn-primary">${pageIndex}</button></c:forEach><c:if test="${currPage == totalPage}"><button onclick="next('${currPage}')" class="btn btn-primary" disabled>下一页</button></c:if><c:if test="${currPage != totalPage}"><button onclick="next('${currPage}')" class="btn btn-primary" >下一页</button></c:if>
//根据查询条件查询当前页function queryPage(pageIndex){var filter = document.getElementById("filter").value;window.location.href = "GetAllEmpServlet?pageIndex=" + pageIndex + "&filter=" + filter;}//根据查询条件查询前一页function prev(pageIndex) {var filter = document.getElementById("filter").value;var currPage = parseInt(pageIndex) - 1;window.location.href = "GetAllEmpServlet?pageIndex=" + currPage + "&filter=" + filter;}//根据查询条件查询下一页function next(pageIndex) {var filter = document.getElementById("filter").value;var currPage = parseInt(pageIndex) + 1;window.location.href = "GetAllEmpServlet?pageIndex=" + currPage + "&filter=" + filter;}
后台实现
数据库接口方法getEmpByPag声明
List<Emp> getEmpByPag(int page,int limit,String ename);
数据库接口方法getEmpByPag实现
@Overridepublic List<Emp> getEmpByPag(int page, int limit, String ename) {Connection conn = DBUtil.getConn();List<Emp> list = new ArrayList<>();PreparedStatement pst = null;ResultSet rs = null;String sql = "select * from employee ";if (ename != null) {sql+=" where ename like ? ";}//mysql的分页语法 select * from table limit 起始序号,每页显示条数//每页显示五条,第一页数据, select * from table limit 0,5//第二条的数据 select * from table limit 5,5//执行sql语句sql+=" limit ?,?";try {pst = conn.prepareStatement(sql);if (ename!=null){pst.setString(1, "%"+ename+"%");pst.setInt(2, (page-1)*limit);pst.setInt(3, limit);}else{pst.setInt(1, (page-1)*limit);pst.setInt(2, limit);}rs = pst.executeQuery();while (rs.next()){Emp emp = new Emp();emp.setEmpno(rs.getInt("empno"));emp.setEname(rs.getString("ename"));emp.setJob(rs.getString("job"));emp.setHiredate(rs.getString("hiredate"));emp.setSex(rs.getString("sex"));list.add(emp);}} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.closeAll(conn, pst, rs);}return list;}
业务逻辑getEmpByPage声明
List<Emp> getEmpByPage(int page,int limit,String ename);
业务逻辑getEmpByPage实现
@Overridepublic List<Emp> getEmpByPage(int page, int limit, String ename) {return empDao.getEmpByPag(page,limit,ename);}
GetAllEmpServlet
- 注意此处的GetAllEmpServlet是项目最终的样式,和第五天中查询功能的后台GetAllEmpServlet,此处的GetAllEmpServlet具备分页功能。其中业务逻辑层 的方法selectByEname和第五天的相同。
package com.wangbiao.emp.servlet;import com.wangbiao.emp.model.Emp;
import com.wangbiao.emp.service.IEmpService;
import com.wangbiao.emp.service.impl.EmpServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@WebServlet("/GetAllEmpServlet")
public class GetAllEmpServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取用户的查询条件//当我们从登录页面进入到该servlet时filter为null//如果点击查询按钮进入到该servlet时filter为前台填写的内容String filter = request.getParameter("filter");//我们规定每页显示五条数据//从登录进入默认显示第一页数据int page = 1;int limit = 5;//获取前台传递的页码数String pages = request.getParameter("pageIndex");//当从登录页面进入该servlet pages 为null//如果通过点击页码按钮进入到servlet,那么pages有具体值if(pages != null){page = Integer.parseInt(pages);}//前台需要展示页码的按钮,那么需要知道一共有多少页//我们需要获取总条数,然后除以每页显示条数IEmpService empService = new EmpServiceImpl();//不分页的查询List<Emp> list_all = empService.selectByEname(filter);//获取总条数int total = list_all.size();//计算总页数//int totalPage = 0;/*if(total % limit == 0){totalPage = total / limit;}else{totalPage = total / limit + 1;}*///三目运算符int totalPage = total % limit == 0 ? total / limit : total / limit + 1;//根据分页条件进行分页查询List<Emp> list = empService.getEmpByPage(page,limit,filter);if(filter != null){//将查询条件回显request.setAttribute("filter",filter);}//将总页数返回到前台request.setAttribute("totalPage",totalPage);//把当前页面返回到前台request.setAttribute("currPage",page);//跳转到empList.jsp中,并将list集合响应给浏览器request.setAttribute("list",list);request.getRequestDispatcher("empList.jsp").forward(request,response);}
}
2021_01_11_实习实训_day07_员工后台管理项目_编辑功能以及分页查询功能相关推荐
- java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署 ...
- java计算机毕业设计高校实习实训管理系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计高校实习实训管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计高校实习实训管理系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目 ...
- JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈 ...
- java计算机毕业设计高校实习实训管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计高校实习实训管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计高校实习实训管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构 ...
- java计算机毕业设计高校实习实训管理系统(附源码、数据库)
java计算机毕业设计高校实习实训管理系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...
- javaweb实习实训管理系统mysql
本毕业设计基于JSP的实习实训管理系统,本系统能实现网上的实习实训信息管理,主要功能有:添加用户.查看用户.管理用户.添加实验室.查看实验室.管理实验室.添加课程.查看课程.管理课程.添加教学.查看教 ...
- java类与对象实验报告心得体会_java实习实训报告心得【三篇】
[导语]Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.而学习Java的同学java实习实训是必经的过程.以下是无忧考网整理的java实习实训报告心得,欢迎阅读! java实习实训报告心 ...
- JSP实习实训管理系统myeclipse开发mysql数据库WEB结构java编程
一.源码特点 JSP 实习实训管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发. JSP实习实训管理系统my ...
- 计算机毕业设计Java高校实习实训管理系统(源码+系统+mysql数据库+Lw文档)
计算机毕业设计Java高校实习实训管理系统(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java高校实习实训管理系统(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B ...
最新文章
- 团队作业4——第一次项目冲刺(Alpha版本)4.28
- 2021年3月15日 腾讯PCG运营开发实习面试(一、二、三面)(面经含总结)
- 基于策略的路由(下)
- swift_024(Swift 的构造过程)
- CSDN博客转载攻略
- 各国家分析之 古埃及非洲经济
- linux下的struct sigaction
- C++11学习 新特性之 “=default” 、“=delete”
- php 中class,PHP5中的类(class) (转)
- 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水
- linux命令行启动新终端,12个让您震撼的Linux终端命令
- C10K问题及解决方案
- 实施定性风险分析-规划过程组
- 【Unity3D实战】摇摆直升机开发实战(一)
- 6-2 折半查找的实现 (10 分)
- Shell 千分 逗号隔开
- 看我骚操作‘破解’某查查app的sign以及某眼查的Authorization!
- c语言返回结构体,(C/C++) 用函数返回一个结构体
- 《灵飞经5·龙生九子》第二十四章 九王朝阙 上
- 知乎、百度会被ChatGPT取代吗?百度文心一言胜算如何