controller代码节选:
@RequestMapping(value = "/update/{id}", method = RequestMethod.PUT)
public String update(HttpServletRequest request,
HttpServletResponse response, ModelMap modelMap, Equipment equipment) {
System.out.println(request.getParameter("name"));
System.out.println(equipment.getIp());
this.getEquipmentService().update(equipment);
return "redirect:/equipment/list/json";
}
前端jQuery的ajax请求代码:
function putTest(){
$.ajax('<%=request.getContextPath()%>/equipment/update/82f1c375-38d0-4c4b-bc15-e81e98fc4506',{type:'post',data:{_method:'put',id:'82f1c375-38d0-4c4b-bc15-e81e98fc4506',name:'设备1',ip:'127.0.0.1',port:'8887',updateTime:'2011-10-09 11:11:56'}});
}
web.xml添加了HiddenHttpMethodFilter:
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>DispatcherServlet</servlet-name>
按上面的配置,在前端点击按钮执行putTest方法后,后台的
System.out.println(request.getParameter("name"));
System.out.println(equipment.getIp());
正常输出数据。
但是把前端的的post方法改成put,后台的数据都接收不了了,输出为null。
$.ajax('<%=request.getContextPath()%>/equipment/update/82f1c375-38d0-4c4b-bc15-e81e98fc4506',{type:'put',data:{_method:'put',id:'82f1c375-38d0-4c4b-bc15-e81e98fc4506',name:'设备1',ip:'127.0.0.1',port:'8887',updateTime:'2011-10-09 11:11:56'}});
在firebug上也没查到有出错的信息。
在form内部加上一hidden域
就可以了。
浏览器本身只支持get和post方法,使用_method来告知spring这是一个put请求。
建议你使用spring的taglib,写form会方便很多,还可以绑定model。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。