Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Thymeleaf - Button click to call http delete method

I would like to call the url via http delete method. I tried th:onclick and th:action but not working.

html code:

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

controller code:

@RequestMapping(value="/foos/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable String id) {
    studentService.delete(id);
    return "Successfully deleted";
}
like image 713
richersoon Avatar asked Jul 14 '16 09:07

richersoon


2 Answers

The th:method="delete" creates the hidden input field automatically for you. If you add it manually as well you will have it twice. Check the source code.

I still got the POST Error message after the recommendations here. I found out Spring ignores those hidden fields by default. The solution is to activate it in your application.properties file:

spring.mvc.hiddenmethod.filter.enabled=true

My working code in my application looks like this:

Form:

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

Controller:

@RequestMapping(value="/books/delete/{id}", method = RequestMethod.DELETE)
public String deleteBook(@PathVariable Long id) {
    bookService.deleteBook(id);
    return "books";
}
like image 101
Raphael Roussis Avatar answered Sep 18 '22 14:09

Raphael Roussis


I think you will need a form for your transaction. And also this hidden input field.

<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>
like image 29
Patrick Avatar answered Sep 16 '22 14:09

Patrick