这是我的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));
}
在浏览器中,它会向PUT
发送/users/1
。
这是我的路线简介:
GET /users/new controllers.UsersController.newUser()
POST /users controllers.UsersController.create()
GET /users/:id controllers.UsersController.show(id: Long)
GET /users/:id/edit controllers.UsersController.edit(id: Long)
PUT /users/:id controllers.UsersController.update(id: Long)
这是我的表格:
@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>
}
但是,当我访问/users/1/edit
并点击更新按钮时,请求将以http://localhost:9000/users/1?email=My+Email&username=My+Username&password=My+Password&action=update
而非封装表单数据的形式发送,并由show()
代替{{1}处理}}。
任何人都可以提供有关此问题的更多信息吗?
答案 0 :(得分:0)
问题是浏览器仅支持从表单发送POST或GET请求。如果您查看表单中呈现的HTML,您会看到它的内容如下:
<form action="/users/1" method="PUT">
但是由于浏览器不支持从表单发出PUT请求,浏览器会忽略方法参数,默认为默认方法,即GET。因此,浏览器发出GET请求,Play会相应地处理。
因此,您只能对HTML表单使用POST或GET。有一些解决方法,例如,您可以使用JavaScript来劫持表单提交,并使用表单数据中的AJAX发出PUT请求。