SpringMVC 参数映射与文件上传 (3)

1.修改页面中的td,使得每一个td都可以编辑:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <head> </head> <body> <form action="deleteCourses"> <table> <tr> <th>选择</th><th>名称</th><th>讲师</th><th>开课日期</th><th>学分</th><th>课时</th><th>操作</th> </tr> <c:forEach items="${courses}" var="course" varStatus="status"> <tr> <td><input type="checkbox" value="${course.id}"></td> <td><input value="${course.name}"/></td> <td><input value="${course.teachName}"/></td> <td><input value='<fmt:formatDate value="${course.startTime}" pattern="yyyy-MM-dd"/>'/></td> <td><input value="${course.score}"/></td> <td><input value="${course.hours}"/></td> <input hidden="hidden" value="${course.id}"> <td><a href="http://www.likecs.com/editCourse?id=${course.id}">修改</a></td> </tr> </c:forEach> </table> <input type="submit" value="批量删除"> <input type="button" value="批量修改"> </form> </body> </html>

2.包装类型:

public class RequestPack { //用于接收参数列表的list private List<Course> courses; public List<Course> getCourses() { return courses; } public void setCourses(List<Course> courses) { this.courses = courses; } public RequestPack(List<Course> courses) { this.courses = courses; } }

3.handler方法:

@RequestMapping("/updateCourses") public String updateCourses(RequestPack data){ courseService.updateCourses(data.getCourses()); return "/getCourses"; }

4.service方法:

public void updateCourses(List<Course> courses) { for (Course course:courses){ courseMapper.updateByPrimaryKey(course); } }

强调:list只能映射到包装类型中,无法直接映射到handler参数上

错误案例:

@RequestMapping("/updateCourses") public String updateCourses(RequestPack data, ArrayList<Course> courses){ courseService.updateCourses(data.getCourses()); return "/getCourses"; } 文件上传

文件上传是web项目中非常常见的需求,SpringMVC使用了apache开源的两个库用于处理文件上传,所以在编写代码前我们需要先导入下面两个依赖包:

<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>

假设需要实现一个上传图片的功能,需要现在数据库中添加一个字段用于存储图片的路径,同时不要忘记修改pojo以及mapper文件,使之与数据库字段对应

1.页面增加input 用于提交文件,并修改表单的enctype为multipart/form-data

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head></head> <form action="updateCourse" method="post" enctype="multipart/form-data"> <input value="${course.id}" hidden="hidden"/> 名称:<input value="${course.name}"/> <br/> 讲师:<input value="${course.teachName}"/> <br/> <input type="date" value='<fmt:formatDate value="${course.startTime}" pattern="yyyy-MM-dd"/>'/> <br/> 学分:<input type="number" value="${course.score}"/> <br/> 课时:<input type="number" value="${course.hours}"/> <br/> <c:if test="${course.pic != null}"> <img src="http://www.likecs.com/${pageContext.servletContext.contextPath}${course.pic}"> </c:if> 图片:<input type="file"/><br/> <!-- 新增input--> <br/> <input type="submit"> </form> <body> </body> </html>

2.在mvc配置文件中添加multipart解析器,(页面上传文件都是以,multipart编码方式)

<bean/>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzyxf.html