Thymeleaf - 按钮单击以调用http删除方法

ric*_*oon 9 java spring-mvc java-ee thymeleaf

我想通过http delete方法调用url.我试过了:onclick和th:行动但不行.

HTML代码:

<button id="delete" name="delete" th:onclick="@{'/foos/{id}'(id=${foo.id})}" th:method="delete">Delete</button>
Run Code Online (Sandbox Code Playgroud)

控制器代码:

@RequestMapping(value="/foos/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable String id) {
    studentService.delete(id);
    return "Successfully deleted";
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 12

我想你form的交易需要一个.还有这个隐藏的输入字段.

<form action="#" th:action="@{'/delete/{id}'(id=${foo.id})}" th:method="delete" >
  <input type="hidden" name="_method" value="delete" />
  <button type="submit" id="submitButton"> </button>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 当我尝试这个时,会发送一个发布请求,尽管输入的值是删除并且方法是删除...... (6认同)

小智 12

th:method="delete"会自动为您创建隐藏的输入字段。如果您也手动添加它,您将获得两次。检查源代码。

在此处的建议之后,我仍然收到 POST 错误消息。我发现 Spring 默认情况下会忽略这些隐藏字段。解决方案是在您的文件中激活它application.properties

spring.mvc.hiddenmethod.filter.enabled=true
Run Code Online (Sandbox Code Playgroud)

我的应用程序中的工作代码如下所示:

形式:

<form action="#" th:action="@{'/books/delete/{id}'(id=${book.id})}" th:method="delete" >
    <button type="submit" class="btn">
        Delete
    </button>
</form>
Run Code Online (Sandbox Code Playgroud)

控制器:

@RequestMapping(value="/books/delete/{id}", method = RequestMethod.DELETE)
public String deleteBook(@PathVariable Long id) {
    bookService.deleteBook(id);
    return "books";
}
Run Code Online (Sandbox Code Playgroud)