项目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: Administrator
Date: 2021/1/11
Time: 8:57
To 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 = function () {
var job = document.getElementById("jobStr").value;
document.getElementById("jobSel").value = job;
var msg = document.getElementById("msg").value;
if(msg != "" && msg != null){
alert(msg);
}
}
function cancel(){
window.location.href = "GetAllEmpServlet";
}
</script>
</body>
</html>
返回前台
- 最后将表单提交给后台EditServlet,通过后台将数据库中的信息更改。最后若编辑成功则通过GetAllEmpServlet将编辑好的信息带回到前台empList.jsp。
后台实现
相关数据库接口与方法
数据库接口方法 getEmpByEmpno声明
Emp getEmpByEmpno(int empno);
数据库接口方法 editEmp声明
int editEmp(Emp emp);
数据库接口方法getEmpByEmpno实现
@Override
public 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实现
@Override
public 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实现
@Override
public Emp getEmpByEmpno(String empno) {
int empnoInt = Integer.parseInt(empno);
return empDao.getEmpByEmpno(empnoInt);
}
业务逻辑editEmp实现
@Override
public 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");
IEmpService empService = new EmpServiceImpl();
Emp emp = empService.getEmpByEmpno(empno);
if(emp != null){
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");
int empnoInt = Integer.parseInt(empno);
Emp emp = new Emp();
emp.setEmpno(empnoInt);
emp.setEname(ename);
emp.setSex(sex);
emp.setHiredate(hiredate);
emp.setJob(job);
IEmpService 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实现
@Override
public 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 ? ";
}
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实现
@Override
public 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 {
String filter = request.getParameter("filter");
int page = 1;
int limit = 5;
String pages = request.getParameter("pageIndex");
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 = 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);
request.setAttribute("list",list);
request.getRequestDispatcher("empList.jsp").forward(request,response);
}
}