利用SpringMVC来做一个关于员工信息的CRUD(增删改查),符合Rest风格的。
- C:Create 创建
- R:Retrieve 查询
- U:Update 更新
- D:Delete 删除
原本是连接数据库保存数据,但是现在使用Map,List保存数据之类的。
1.导包
2.写配置
(1)配置web.xml,写前端控制器,字符过滤器和支持Rest风格的过滤器
(2)编写SpringMVC配置文件,增减context名称空间进行组件扫描,配置视图解析器。
3.增减实体类
4.增加Dao类
(1)DepartmentDao :
(2)EmployeeDao :
因为要完成的是Restful风格的增删改查,所以增删改查的地址是:/资源名/资源标识。如下
流程:访问index.jsp页面--->发送请求/emps--->控制器查出所有员工-->放在请求域中-->转发到emplist页面进行展示
1.index.jsp:编写页面链接
2.增加处理器
3.员工列表页面,SpringMVC中没遍历的标签,需要使用jstl标签进行集合遍历,增加jstl标签库jar包。
4.emplist页面显示:
流程:在emplist页面点击员工添加--->查询所有的部门信息展示在添加页面-->来到员工添加页面(add.jsp)-->输入员工数据-->点击保存-->处理器收到员工保存请求(保存员工)-->保存完成后还是来到列表页面。
1.在emplist上添加链接:
2.增加处理器方法,因为部门信息要回显到页面中,所以要获取部门信息放到隐含模型中:
3.添加页面:
(1)单纯的form表单,取值麻烦
(2)使用SpringMVC的表单标签,可以实现将模型数据中的属性和HTML表单元素相绑定,以实现表单数据更便捷编辑和表单值回显。
跳转到这个添加页面时,会报错,请求域中没有一个command类型的对象。
SpringMVC认为,表单数据中的每一项最终是要回显的,path指定的是一个属性,这个属性是从隐含模型(请求域中取出的某个对象中的属性)。请求域中必须有这个对象,拥有这个属性,这个对象就是请求域中的command对象。
解决方法一:在处理方法中,向请求域中添加conmand对象,表单标签会从请求域中获取一个command对象,把这个对象中的每一个属性对应的显示出来。
显示为:
解决方法二: 解决方法一回显的是一个员工的值,不需要显示出来这些东西。可以告诉SpringMVC不要去取command值,做了一个modelAttribute指定的值,取对象时用的key就用modelAttribute指的值。
显示为:
4.点击保存,表单标签的处理方式为:
添加处理方法,因为添加完后要显示所有员工,所以使用重定向到员工列表页面。
总结:
Spring的表单标签:
- 一般情况下,通过GET请求获取表单页面,而通过POST请求提交页面,因此获取表单页面和提交表单页面的URL是相同的。
- 只要满足该最佳条件的契约,<form:form>标签就无需通过action属性指定表单提交的URL。
- 可以通过modelAttribute属性指定绑定的模型属性,若没有指定该属性,则默认从request域对象中读取command的表单bean,如果该属性值也不存在,则会发生错误。
SpringMVC提供了多个表单组件标签,如<form:input/>,<form:select/>等,用以绑定表单字段的属性值,共有属性如下:
- path:表单字段,对应html元素的name属性,支持级联属性。
- htmlEscape:是否对表单值的HTML特殊字符进行转换,默认值为true。
- cssClass:表单组件对应的CSS样式类名
- cssErrorClass:表单组件的数据存在错误时,采取的CSS样式。
- form:input、form:password、form:hidden、form:textarea:对应 HTML 表单的 text、password、hidden、textarea 标签
- form:radiobutton:单选框组件标签,当表单 bean 对应的属性值和 value 值相等时,单选框被选中
- form:checkbox:复选框组件。用于构造单个复选框
- form:checkboxs:用于构造多个复选框。使用方式同 form:radiobuttons 标签
- form:select:用于构造下拉框组件。使用方式同 form:radiobuttons 标签
- form:option:下拉框选项组件标签。使用方式同 form:radiobuttons 标签
- form:errors:显示表单组件或数据校验所对应的错误。
流程图:点击EDIT-->查出要修改的员工信息放到请求域中(发送/emp/id请求 GET)-->来到修改页面(edit.jsp)进行回显-->输入完成数据,点击修改按钮(/emp/id PUT)--->修改员工信息(ModelAttribute提前查询员工)---->来到列表页面
1.页面链接
2.处理器方法:
3.edit.jsp页面,显示员工信息
页面显示为:
4.提交表单,修改员工信息
(1)表单的action,要注意是绝对路径
(2)处理器方法:修改员工,我们可以知道的是这个要修改的员工信息被封装成一个Employee对象,但是修改页面中有些信息是没有的,例如员工的id和员工姓名。可以用在页面使用隐藏域来传递id,然后可以写一个ModelAttribute提前查询员工姓名。
注意:
(1)发送修改请求的时候,也可以不需要带id。因为id放在了隐藏域中(请求域中),可以在ModelAttribute中获取到。
(2)一定要注意在提前运行ModelAttribute方法时,判断id是否为null。
流程:发送删除请求(/emp/id DELETE)-->删除员工-->来到列表页面
删除链接:发起请求,无法执行,因为delete请求必须通过post请求转换为delete请求。
解决方法一:
(1)使用form表单
(2)处理器方法:
(3)显示结果:
解决方法二:使用JQuery来转换请求方式。
(1)加入jquery库文件:scripts/jquery-1.9.1.min.js。
这个文件可能会出现问题:优雅的 REST 风格的资源URL 不希望带 .html 或 .do 等后缀,若将 DispatcherServlet 请求映射配置为 /,则 Spring MVC 将捕获 WEB 容器的所有请求, 包括静态资源的请求, SpringMVC 会将他们当成一个普通请求处理,因找不到对应处理器将导致错误。在配置文件中配置
(2)通过JQuery来转换delete请求
(3)处理器方法不变
(4)流程图解:
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/18423.html