ssm练手(CRUD) 8、实现修改功能
来源:互联网 发布:禁止在淘宝网上发布 编辑:程序博客网 时间:2024/06/08 06:15
在实现之前,先声明下请求时候代表的意义
URI含义:/emp/{id} GET查询员工/emp POST保存员工/emp/{id} PUT修改员工/emp/{id} DELETE 删除员工
其逻辑如下:
1、 点击编辑
2、 弹出用户修改的模态框(显示用户信息)
3、 用户更新
1)EmployeeController.java添加内容:
//处理查询员工请求的方法: @ResponseBody @RequestMapping(value="/emp/{id}",method=RequestMethod.GET) public Msg getEmp(@PathVariable("id")Integer id){ //创建一个员工对象,指向Service层中找到的那个员工对象 Employee employee=employeeService.getEmp(id); return Msg.success().add("emp", employee); } /* * 更新员工 * 此处的{empId}一定要和Employee.java中的属性对应一样才能传入参数 */ @ResponseBody @RequestMapping(value="/emp/{empId}",method=RequestMethod.PUT) public Msg updateEmp(Employee employee,HttpServletRequest request){ System.out.println("请求体中的值:"+request.getParameter("gender")); System.out.println("将要更新的数据:"+employee); employeeService.updateEmp(employee); return Msg.success(); }
2)EmployeeService.java添加内容
//按照员工id查询员工 public Employee getEmp(Integer id) { Employee employee=employeeMapper.selectByPrimaryKey(id); return employee; } //员工更新 public void updateEmp(Employee employee) { //按照主键,有选择的更新 employeeMapper.updateByPrimaryKeySelective(employee); }
3)web.xml中在最后(元素顺序很重要)添加如下内容这一步特别重要,请看我另一篇博客:http://blog.csdn.net/zyf2333/article/details/77886028
<filter> <filter-name>HttpPutFormContentFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping> <filter-name>HttpPutFormContentFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4)index.jsp(emmm,依旧是最后总结再整理吧,太乱了将就着)
package com.atguigu.crud.controller;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.validation.Valid;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.atguigu.crud.bean.Employee;import com.atguigu.crud.bean.Msg;import com.atguigu.crud.service.EmployeeService;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;/* * 处理员工CRUD请求 */@Controllerpublic class EmployeeController { @Autowired EmployeeService employeeService; /* * 1、@ResponseBody令数据不会被解析,而是直接写入HTTP response body中 * (比如异步获取JSON数据就要用到这个) * 2、想要@ResponseBody正常工作,需要导入jackson包。这个 * 包负责将对象转化为JSON字符串 */ @RequestMapping("/emps") @ResponseBody public Msg getEmpsWithJson(@RequestParam(value="pn",defaultValue="1")Integer pn){ //这一段不变,查询数据 PageHelper.startPage(pn, 5); List<Employee> emps=employeeService.getAll(); PageInfo page=new PageInfo(emps,5); /* * 此处我们不用添加model,直接返回page对象(里面的数据) * 结合@ResponseBody,直接将JSON数据添加到response请求中 */ return Msg.success().add("pageInfo",page); } //用于保存员工 /* * 1、要支持JSR303校验,需要导入Hibernate-Validator的依赖 * 2、要使用,需要添加@Valid表示要校验Employee(该类中已经添加要求) * 还要添加BindingResult来封装校验结果 */ @RequestMapping(value="/emp",method=RequestMethod.POST) @ResponseBody public Msg saveEmp(@Valid Employee employee,BindingResult result){ if(result.hasErrors()){ //校验失败,需要返回失败,在模态框中显示校验失败的错误信息,遍历错误信息 //封装个map,用于返回错误信息 Map<String,Object> map=new HashMap<>(); List<FieldError> errors=result.getFieldErrors(); for(FieldError fieldError:errors){ System.out.println("错误的字段:"+fieldError.getField()); System.out.println("错误信息:"+fieldError.getDefaultMessage()); map.put(fieldError.getField(), fieldError.getDefaultMessage()); } return Msg.fail().add("errorFields", map); }else{ employeeService.saveEmp(employee); return Msg.success(); } } //检查是否员工重复,输入的用户名是否可用 @ResponseBody @RequestMapping("/checkuser") public Msg checkuser(@RequestParam("empName")String empName){ //先判断用户名是否合法的表达式 String regx="(^[a-zA-Z0-9_-]{4,16}$)|(^[\u2E80-\u9FFF]{2,5})"; if(!empName.matches(regx)){ return Msg.fail().add("va_msg", "用户名必须是4-16数字字母组合,或者2-5位中文(后台校验)"); } //数据库用户名重复校验 boolean b=employeeService.checkUser(empName); if(b){ return Msg.success(); }else{ return Msg.fail().add("va_msg", "用户名已存在(后台校验)"); } } //处理查询员工请求的方法: @ResponseBody @RequestMapping(value="/emp/{id}",method=RequestMethod.GET) public Msg getEmp(@PathVariable("id")Integer id){ //创建一个员工对象,指向Service层中找到的那个员工对象 Employee employee=employeeService.getEmp(id); return Msg.success().add("emp", employee); } /* * 更新员工 * 此处的{empId}一定要和Employee.java中的属性对应一样才能传入参数 * * 如果之间发送ajax=PUT形式的请求,封装数据全部变成null * 问题: * 请求体中有数据,但是Employee封装不上; * * 原因: * Tomcat中的问题: * 1、将请求体中的数据,封装成一个map。 * 2、request.getParameter("empName")就会从map中取值 * 3、springmvc封装POJO时,会把POJO每个属性的值,request.getParameter(".."); * * ajax发送PUT请求发送的血案 * put请求体中的数据,request.getParameter(".."),都拿不到数据 * Tomcat一看是put请求,就不会封装map,只有POST请求才封装ajax */ @ResponseBody @RequestMapping(value="/emp/{empId}",method=RequestMethod.PUT) public Msg updateEmp(Employee employee,HttpServletRequest request){ employeeService.updateEmp(employee); return Msg.success(); }}
阅读全文
0 0
- ssm练手(CRUD) 8、实现修改功能
- ssm练手(CRUD) 9、实现删除功能
- ssm练手(CRUD) 7、实现新增功能并用JSR303校验
- ssm练手(CRUD) 10、总结
- ssm练手(CRUD) 2、修改sql方法,并利用JUnit结合数据库进行测试
- ssm练手(CRUD) 1、创建项目并配置文件
- ssm练手(CRUD) 6、重新构建员工列表
- SSM-CRUD-修改
- ssm练手(CRUD) 3、利用pagehelper分页,并进行测试
- ssm练手(CRUD) 4、结合bootstrap,建立好前端模型
- ssm练手(CRUD) 5、用JSON重新规划数据传递
- Hibernate程序之实现功能(CRUD)
- ibatis实现CRUD功能
- SSM实现简单的CRUD技术分析
- SSM-CRUD
- SSM实现登录功能
- SSM框架的整合(CRUD)
- MyBatis实现CRUD(增加,删除,修改,查询,分页)
- Java面试经历
- psimage生成eps格式图片参数
- ACM随笔
- 关于web XSS注入问题
- MyCat配置文件详解--schema.xml
- ssm练手(CRUD) 8、实现修改功能
- Codeforces Round#433 C Planning
- redis 队列
- JavaScript实现二级联动下拉框
- cocos2dx 3.x关于网络http的curl编译报错_imp_curl_esay_XX解决
- [编程题] 膨胀的牛牛
- 第13期《织梦之路》9月刊
- Duilib消息路由
- ubuntu下sublime 3安装Package Control的超简单方法