发表于: 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的 表单标签实现。



收获:

代码出现问题后,定位问题不准,搞了大半天不如师兄的几句话。

有些例子虽然跑通,但是对执行过程中的的一些细节还是说不清。



返回列表 返回列表
评论

    分享到