Playframework 为什么将PUT发送到show()而不是update()?

Playframework 为什么将PUT发送到show()而不是update()?,playframework,playframework-2.0,Playframework,Playframework 2.0,这是我的edit()方法: public static Result edit(Long id) { User user = User.findById(id); Form<User> form = new Form<User>(User.class).fill(user); return ok(edit.render(user, form)); } 这是我的表格: @helper.form(action = routes.User

这是我的
edit()
方法:

  public static Result edit(Long id)
  {
    User user = User.findById(id);
    Form<User> form = new Form<User>(User.class).fill(user);

    return ok(edit.render(user, form));
  }
这是我的表格:

@helper.form(action = routes.UsersController.update(user.id)) {

  @helper.inputText(editUserForm("email"))
  @helper.inputText(editUserForm("username"))
  @helper.inputPassword(editUserForm("password"))

  <button type="submit" name="action" value="update">Update</button>
}
@helper.form(action=routes.userscocontroller.update(user.id)){
@helper.inputText(editUserForm(“电子邮件”))
@helper.inputText(editUserForm(“用户名”))
@helper.inputPassword(editUserForm(“密码”))
更新
}
但是,当我访问
/users/1/edit
并单击更新按钮时,请求将作为
http://localhost:9000/users/1?email=My+电子邮件&username=My+username&password=My+password&action=update
而不是封装的表单数据,由
show()
而不是
update
处理


有人能提供更多关于这个问题的见解吗

问题在于浏览器只支持从表单发送POST或GET请求。如果您查看表单中呈现的HTML,您将看到它显示如下内容:

<form action="/users/1" method="PUT">

但由于浏览器不支持从表单发出PUT请求,因此浏览器会忽略方法参数,并默认为默认方法,即GET。因此浏览器发出GET请求,Play会相应地处理该请求


因此,您只能在HTML表单中使用POST或GET。有一些解决方法,例如,您可以使用JavaScript劫持表单提交,并使用AJAX从表单数据发出PUT请求。

Yeah。将路由更改为POST确实解决了问题。很奇怪Chrome不支持PUT。我认为这已经是一段时间的标准。不,标准说只支持POST/GET,如果Chrome引入了对其他方法的支持,这实际上会在许多网站中引入CSRF漏洞。
<form action="/users/1" method="PUT">