发表于: 2017-12-25 23:45:09
1 622
今天完成的事:
SSM增删改查跑通了一个例子,删除完成一半,不用rest接口可以删除,使用rest接口没有删除成功。
遇到的困难:
1、form表单提交请求不支持put和delete,可以在配置文件加过滤器,如图
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
form表单加隐藏方法:
<form:form action="${pageContext.request.contextPath}/u" method="put" modelAttribute="student">
<input hidden name="_method" value="put">
注意:过滤器应该在前端控制器之前。
2、配置好上面两个文件后,依然无法完成更新数据后的页面跳转,各种百度发现这个方法没错,执行的时候可以进入到方法中但是无法正常跳转页面。
原因:
return "redirect:list";
除了get方法外,其他三个的页面跳转需要是重定向,重定向的页面必须是通过controller中方法可以到达的页面。
3、删除和修改都是用的超链接,但是删除的出了问题
原因:<a>标签超链接方式请求,是get方式
4、删除功能没有用restful接口,代码如下
<a href="<%= request.getContextPath()%>/d/${student.id}">删除</a>
//根据id删除
@RequestMapping(value = "/d/{id}")
public String delStu(@PathVariable Integer id) {
System.out.println(id);
service.deleteStudent(id);
System.out.println("----delete");
return "redirect:list";
}
可以删除,但跳转页面出现错误,400---请求无效
原因:重定向出现问题,删除请求路径中的 /d 之后成功。
return ”list“---指定页面的全路径是 /WEB-INF/views/xxx.jsp,加上视图解析的前缀后缀
但是redirect明显不是这样,那么重定向的两次定位差别只有请求最后的一个参数,现在只知道是这个结果,但为什么第二次请求会这样呢
5、更新操作时,controller中的方法可以进入,但是在form表单中输入的参数传不过去,方法中的student一直为空,没找到解决方案
form表单
<form id="stuForm" action="<%= request.getContextPath()%>/u" method="post" >
<input type="hidden" name="_method" value="PUT" />
<table border="1" cellpadding="1" cellspacing="1">
<tr>
<td>id</td>
<td><input type="text" name="id" value="${student.id}" readonly></td>
</tr>
<tr>
<td>name</td>
<td><input type="text" name="id" value="${student.name}" ></td>
</tr>
<tr>
<td>age</td>
<td><input type="text" name="id" value="${student.age}" ></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
controller
@RequestMapping(value = "/u",method = RequestMethod.PUT)
public String update(@Param("student") Student student ) {
System.out.println("=========更改");
service.updateStudent(student);
System.out.println(student);
return "redirect:list";
}
修改后结果
controller层可以进入方法,但无法获取修改的信息,student的信息一直为空,不知道原因。
6、参考师兄日报,改用了springmvc的表单标签,实现了修改功能。
<form:form action="${pageContext.request.contextPath}/u" method="put" modelAttribute="student">
<input hidden name="_method" value="put">
ID:${student.id}<br/>
ID:<form:input path="id"/><br/>
modelAttribute指定表单绑定的model,然后可以通过path给model中的属性赋值,提交方法是post和get。
明天计划:
1、改变超链接<a>标签的请求提交方式需要用到jQuery,明天学一下。
2、用form表单实现修改信息,而不是用springmvc的 表单标签实现。
收获:
代码出现问题后,定位问题不准,搞了大半天不如师兄的几句话。
有些例子虽然跑通,但是对执行过程中的的一些细节还是说不清。
评论