Ajax-Servlet第三课 员工管理系统-修改员工信息

Posted 笔触狂放

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax-Servlet第三课 员工管理系统-修改员工信息相关的知识,希望对你有一定的参考价值。

概念

本文在上一篇博客文章基础上,完成修改员工信息功能。

功能实现

通过点击任何一个员工信息上的修改按钮触发点击事件,将该员工的员工编号发送给服务器上

<td><input class=\\"update\\" type=\\"button\\" onclick='update("+json[i].id+")' value=\\"修改\\">&nbsp;\\n" +
//当任何一个修改按钮被点击,就会触发该方法事件
        //获得该修改按钮对应的员工编号
        function update(id) 
            //将该员工的员工编号发送给服务器
            //要求服务器根据员工编号查询该员工的信息,并显示在修改页面上
            location.href="SearchServlet?id="+id;
        

在控制器中接收该请求:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        //接收页面发送过来的员工编号
        int id=Integer.parseInt(request.getParameter("id"));
        //将员工编号存储至session中
        request.getSession().setAttribute("id",id);
        //跳转至修改页面
        response.sendRedirect("update.html");
    

进入修改页面后,当页面加载完毕,自动触发ajax请求给服务器,要求服务器获得

1.数据库中所有部门名称供用户选择

2.查询出要修改的员工信息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>员工管理系统-修改员工信息</title>
    <style>
        table
            background-color: darkcyan;
            width: 300px;
            height: 200px;
            color: white;
            font-weight: bold;
            text-align: center;
            border-width: 0px;
            border-radius: 7px;
        
        #sub
            width: 100px;
            padding: 5px 10px;
            border-width: 0px;
            border-radius: 5px;
            background-color: cornflowerblue;
            color: white;
            font-weight: bold;
        
        #sub:hover
            background-color: red;
        
    </style>
    <script src="js/jquery-3.2.1.min.js"></script>
    <script>
        $(function () 
            //监听当前页面是否完全显示在浏览器上,如果加载完成
            //自动触发给事件,发出ajax请求,要求服务器返回数据库中现有的部门名称
            // 以及要修改的员工信息
            $.ajax(
                url:"UpdateServlet",
                type:"GET",
                data:"",
                success:function (json) 
                "work":["","",""],"infoById":"id":1,"name":"张三"
                    for (var i = 0; i <json.work.length ; i++) 
                        $("#dl").append("<option>"+json.work[i]+"</option>");
                    
                    $("input[name='name']").val(json.infoById.name);
                    $("input[name='age']").val(json.infoById.age);
                    $("input[name='openDate']").val(json.infoById.openDate);
                    $("input[name='workClass']").val(json.infoById.workClass);
                    //判断当前员工的性别是男还是女,如果是男,那么将第一个单选按钮选中,否则选中第二个
                    if (json.infoById.sex=="男")
                        $("input[value='男']").attr("checked",true);
                    else 
                        $("input[value='女']").attr("checked",true);
                    
                ,
                error:function () 
                    alert("连接服务器失败");
                ,
                dataType:"json"
            );
        );
    </script>
</head>
<body>
<div align="center">
    <form action="UpdateServlet" method="post">
        <table>
            <tr>
                <th colspan="2">修改员工信息</th>
            </tr>
            <tr>
                <td>姓名:</td>
                <td><input type="text" name="name" placeholder="请输入新员工姓名"></td>
            </tr>
            <tr>
                <td>性别:</td>
                <td><input type="radio"  value="男" name="sex">男&nbsp;
                    <input type="radio" value="女" name="sex">女</td>
            </tr>
            <tr>
                <td>年龄:</td>
                <td><input type="number" name="age" placeholder="请输入新员工年龄"></td>
            </tr>
            <tr>
                <td>入职时间:</td>
                <td><input type="text" name="openDate" placeholder="请输入入职时间"></td>
            </tr>
            <tr>
                <td>部门名称:</td>
                <!--允许选择现有的部门名称,也可以新增其他的部门名称-->
                <td><input type="search" list="dl" name="workClass" placeholder="请输入部门名称">
                    <datalist id="dl">

                    </datalist>
                </td>
            </tr>
            <tr>
                <td colspan="2"><input id="sub" type="submit" value="更新"></td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

控制器收到请求后,执行任务:

package com.emp.controller;

import com.emp.service.EmpServiceImp;
import com.emp.service.IEmpService;
import com.fasterxml.jackson.databind.ObjectMapper;

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.HashMap;
import java.util.List;
import java.util.Map;

@WebServlet(urlPatterns = "/UpdateServlet")
public class UpdateServlet extends HttpServlet 
    IEmpService service=new EmpServiceImp();
   

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        //1.获得数据库中现有的部门名称
        List<String> work = service.getWork();
        // 2.获得要修改的员工信息
        int id= (int) request.getSession().getAttribute("id");
        //将根据员工编号查询数据库获得该员工的完整信息,并将其封装成json格式,
        //发回修改页面,显示出来,供用户进行修改
        Map<String, Object> infoById = service.getInfoById(id);
        //将两部分数据封装在Map集合中
        Map<String,Object> map=new HashMap<>();
        map.put("work",work);
        map.put("infoById",infoById);
        //"work":["","",""],"infoById":"id":1,"name":"张三"
        new ObjectMapper().writeValue(response.getWriter(),map);

    

控制器将任务递交给业务逻辑层接口:

List<String> getWork();
//根据员工编号查询员工的完整信息
    Map<String,Object> getInfoById(int id);

业务逻辑层实现类将任务递交给数据访问层执行:

 @Override
    public List<String> getWork() 
        return dao.getWork();
    
 @Override
    public Map<String, Object> getInfoById(int id) 
        return dao.getInfoById(id);
    

数据访问层接口接收任务要求:

List<String> getWork();
//根据员工编号查询员工的完整信息
    Map<String,Object> getInfoById(int id);

并有实现类执行sql语句获得结果:

@Override
    public List<String> getWork() 
        return DBUtil.jt.query("select distinct workClass from emp",
               new MyRowMapper("workClass") );
    
 @Override
    public Map<String, Object> getInfoById(int id) 
        return DBUtil.jt.queryForMap("select * from emp where id=?",
                new Object[]id);
    

将查询的结果最终返回给控制层,由控制层封装层json解析,发回html页面进行展示:

 success:function (json) 
                "work":["","",""],"infoById":"id":1,"name":"张三"
                    for (var i = 0; i <json.work.length ; i++) 
                        $("#dl").append("<option>"+json.work[i]+"</option>");
                    
                    $("input[name='name']").val(json.infoById.name);
                    $("input[name='age']").val(json.infoById.age);
                    $("input[name='openDate']").val(json.infoById.openDate);
                    $("input[name='workClass']").val(json.infoById.workClass);
                    //判断当前员工的性别是男还是女,如果是男,那么将第一个单选按钮选中,否则选中第二个
                    if (json.infoById.sex=="男")
                        $("input[value='男']").attr("checked",true);
                    else 
                        $("input[value='女']").attr("checked",true);
                    
                ,

其页面效果如下:

 

当用户修改员工信息之后,点击更新按钮实现表单提交数据给服务器:

@WebServlet(urlPatterns = "/UpdateServlet")
public class UpdateServlet extends HttpServlet 
    IEmpService service=new EmpServiceImp();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        //接收修改页面发送过来的修改后的数据
        Map<String, String[]> parameterMap = request.getParameterMap();
        parameterMap.forEach((k,v)-> System.out.println(k+":"+v[0]));
        //从session中获得该员工的员工编号作为条件
        int id= (int) request.getSession().getAttribute("id");
        int update = service.update(parameterMap, id);
        if (update>0)
            response.sendRedirect("workerList.html");
    

 服务器将接收的数据递交给业务逻辑层处理:

//根据员工编号作为条件,将数据库中对应的员工信息进行更新
    int update(Map<String,String[]> map,int id);
@Override
    public int update(Map<String, String[]> map, int id) 
        Map<String,Object> m=new HashMap<>();
        for (Map.Entry<String,String[]> entry:map.entrySet()) 
            m.put(entry.getKey(),entry.getValue()[0]);
        
        m.put("id",id);
        return dao.update(m);
    

并将处理后的数据递交给数据访问层执行:

 int update(Map<String,Object> map);
 @Override
    public int update(Map<String, Object> map) 
        return DBUtil.jt.update("update emp set name=?,sex=?,age=?,openDate=?,workClass=? " +
                " where id=?",
                new Object[]
                        map.get("name"),
                map.get("sex"),
                map.get("age"),
                map.get("openDate"),
                map.get("workClass"),
                map.get("id"));
    

并将执行后的结果返回给控制层,控制层根据结果进行判断,修改成功后刷新列表页面,即读者可自行运行查看修改的结果。

总结

本文修改功能就结束到这里,希望读者能通过本文的学习对前后端交互能有更深的认识。

以上是关于Ajax-Servlet第三课 员工管理系统-修改员工信息的主要内容,如果未能解决你的问题,请参考以下文章

Ajax-Servlet第四课 员工管理系统-多选删除员工信息

Django第三课 基于Django超市订单管理系统开发

Django第三课 基于Django超市订单管理系统开发

Django第三课 银行账户管理系统开发

Django第三课 银行账户管理系统开发

学习linux第三课!新手必须掌握的linux命令