ffr*_*end 10 forms spring spring-mvc http-method
Spring 3 MVC支持所有4种RESTful方法:GET,POST,PUT和DELETE.但它的视图技术是否在表格上支持它们?如果没有,标签中method属性的真正用途是form:form什么?
我尝试在表单上使用PUT方法:
<form:form action="/myaction" method="PUT">
...
</form:form>
Run Code Online (Sandbox Code Playgroud)
生成的HTML是:
<form id="command" action="/myaction" method="post">
<input type="hidden" name="_method" value="PUT"/>
...
</form>
Run Code Online (Sandbox Code Playgroud)
很明显,因为除了GET和POST之外,大多数浏览器都不支持其他方法.但Spring可以通过附加input名称_method和值来处理它METHOD_NAME.可以?
当我将指定的表单发送到带注释的控制器方法时
@RequestMapping(method=RequestMethod.PUT)
Run Code Online (Sandbox Code Playgroud)
它声称,POST不支持该请求方法.但为什么POST不PUT呢?在引擎盖下实际发生了什么?
ska*_*man 18
调用的"隐藏参数"的使用_method并不特定于Spring MVC的标记库,但也被其他一些客户端框架使用.Spring正遵循惯例,例如它.
为了正确使用它,你需要为你的web.xml(HiddenHttpMethodFilter,参见javadoc)添加一个过滤器,它将_method参数转换为一个"真正的"HTTP方法表示HttpServletRequest.这是作为一个过滤器来完成的,以强调浏览器缺少的问题,PUT并且DELETE是一个浏览器问题 - servlet API支持它就好了.
因此,如果要在表单中使用这些方法,则需要添加该过滤器.
PS您获得"不支持POST"消息的原因是您的表单使用POST,并且您的处理程序已注释PUT,因此它不匹配.由于您没有定义过滤器,因此_method将忽略该参数.
| 归档时间: |
|
| 查看次数: |
4539 次 |
| 最近记录: |