SpringBoot(25) —— 员工管理系统:修改员工信息

  • 分析:和新增员工信息一样,当我点击修改员工信息的时候,页面应该跳转到一个新的修改信息的页面,这个页面也是提交一个表单信息

目录

    • 1.代码实现
    • 2.小结


1.代码实现

  • 首先,点击修改a标签,将向controller发送对应的视图跳转请求,但是注意,这里还需要传递当前这一行员工数据的id,否则在修改页面不能加载修改之前的数据供用户参考
    <a class="btn btn-primary" th:href="@{/employee/update/}+${emp.getId()}">修改a> |
    
  • 注意上面传递参数的方式,使用了+进行拼接,这显然使用的是restful风格进行参数的传递,因为url和参数之间使用的是"/"进行分割
    在这里插入图片描述
  • 去controller中创建对应的视图跳转方法,这个方法除了需要跳转视图,还应该按照传递的id查询出员工信息返回到前端,让前端的表单中有该员工原有信息的默认值,这样修改的时候只需要修改我们想要修改的部分即可
        @GetMapping("/update/{id}") //restful风格接收参数
        public String updateEmployeePage(@PathVariable("id") Integer id, Model model){  
            //对应的,使用注解@PathVariable 将接收的参数和参数列表中的参数一一对应,以防出错
            System.out.println("id========>"+id);
            
            //根据id把该员工原信息查询出来,并返回前端进行展示
            Employee emp = employeeDao.getEmployeeById(id);
            model.addAttribute("emp",emp);
            
            //注意:因为涉及到修改部门信息,所以我们还是需要把部门所有的信息都查询出来返回到前端,否则部门选择下拉框不能正常的显示和使用
            Collection<Department> departmentCollection = departmentDao.getDepartmentCollection();
            model.addAttribute("depts",departmentCollection);
            
            //让前端跳转到修改信息的视图
            return "Employee/update";
        }
    
  • 创建update.html,这个页面上的表单形式和添加员工信息表达形式一致,并且都有默认值,默认值就是原来这个员工的信息,通过th:value="{emp.getXXX()}"即可实现
    <form th:action="@{/employee/update}" method="post">
    	<input type="hidden" name="id" th:value="${emp.getId()}">
    	<div class="form-group">
    		<label>LastNamelabel>
    		<input type="text" name="lastName" class="form-control" th:value="${emp.getLastName()}">
    	div>
    	<div class="form-group">
    		<label>Emaillabel>
    		<input type="email" name="email" class="form-control" th:value="${emp.getEmail()}">
    	div>
    	<div class="form-group">
    		<label>Genderlabel><br>
    		<div class="form-check form-check-inline">
    			<input class="form-check-input" type="radio" name="gender" value="0" th:checked="${emp.getGender()==0}">
    			<label class="form-check-label">label>
    		div>
    	div>
    	<div class="form-check form-check-inline">
    		<input class="form-check-input" type="radio" name="gender" value="1"  th:checked="${emp.getGender()==1}">
    		<label class="form-check-label">label>
    	div>
    	<div class="form-group">
    		<label>Departmentlabel>
    		<select class="form-control" name="department.id">
    			<option th:each="dept:${depts}" th:text="${dept.getDepartmentName()}"
    					th:value="${dept.getId()}" th:selected="${emp.getDepartment().getId()==dept.getId()}">option>
    		select>
    	div>
    	<div class="form-group">
    		<label>Birthlabel>
    		<input type="text" name="birth" class="form-control" th:value="${#dates.format(emp.getBirth(),'yyyy-MM-dd')}">
    	div>
    	<button type="submit" class="btn btn-primary">修改button>
    form>
    

SpringBoot(25) —— 员工管理系统:修改员工信息_第1张图片

  • 编写上面表单提交的url对应的方法
    @PostMapping("/update")
    public String updateEmployeeForm(Employee employee){
        System.err.println("debug=======>"+employee);//输出接收到的参数
        //添加操作
        employeeDao.updateEmployeeById(employee);//调用dao修改员工数据
        return "redirect:/employee/list";//返回员工信息页视图
    }
    
  • 测试效果
    SpringBoot(25) —— 员工管理系统:修改员工信息_第2张图片
    SpringBoot(25) —— 员工管理系统:修改员工信息_第3张图片
    SpringBoot(25) —— 员工管理系统:修改员工信息_第4张图片
    测试完成!

2.小结

从上面的例子可以看出我们的开发步骤

  • 观察原前端素材,修改/创建前端素材,注意使用thymeleaf的语法取值和传递参数
  • 去controller中创建对应响应的方法,注意调用对应的service层方法向前端返回数据 (由于这个例子中没有写数据库,所以也直接每写service层,直接通过了controller调用了dao层,这样做其实不好,因为controller层应该只是专注获取前端请求参数、调用service获取前端请求的数据、向前端返回数据并指定跳转的视图这4个功能,但是上面的例子中,每个方法中都混合了怎么实现获取请求数据的逻辑代码)
  • 测试

你可能感兴趣的:(SpringBoot,springBoot)