Thymeleaf sends parameter from html to controller

I am new to Thimeleaf. I am trying to create a simple crud application. I am trying to delete an object of class Customer on the delete button. How to set a parameter (e.g. id) in a method called deleteUser using Thymeleaf. Here is my controller.

package controllers;

//imports


@Controller
public class WebController extends WebMvcConfigurerAdapter {

    @Autowired
    private CustomerDAO customerDAO;

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/results").setViewName("results");
    }

    //show all users
    @RequestMapping(value="/users", method=RequestMethod.GET)
    public String contacts(Model model) {
        model.addAttribute("users",customerDAO.findAll());
        return "list";
    }

    //show form
    @RequestMapping(value="/users/add", method=RequestMethod.GET)
    public String showForm(Customer customer) {
        return "form";
    }

    //add user
    @RequestMapping(value="/users/doAdd", method=RequestMethod.POST)
    public String addUser(@RequestParam("firstName") String firstName,
                           @RequestParam("lastName") String lastName,
                           @RequestParam("lastName") String email) {
        customerDAO.save(new Customer(firstName, lastName, email));
        return "redirect:/users";
    }

    //delete user
    @RequestMapping(value="users/doDelete/{id}", method = RequestMethod.POST)
    public String deleteUser (@PathVariable Long id) {
        customerDAO.delete(id);
        return "redirect:/users";
    }
}

Here is my view.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
List of users
<a href="users/add">Add new user</a>
<table>
    <tr>
        <th>Id</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
        <th>Action</th>
    </tr>
    <tr th:each="user : ${users}">
        <td th:text="${user.id}">Id</td>
        <td th:text="${user.firstName}">First name</td>
        <td th:text="${user.lastName}">Last Name</td>
        <td th:text="${user.email}">Email</td>
        <td>
            <form th:action="@{/users/doDelete/}" th:object="${customer}" method="post">
                <button type="submit">Delete</button>
            </form>
        </td>
    </tr>
</table>
</body>
</html>
+5
source share
4 answers

You do not need a form for this:

<td>
    <a th:href="@{'/users/doDelete/' + ${user.id}}">
        <span>Delete</span>
    </a>
</td>
Run codeHide result
+10
source

- , ( ), POST GET , , CSRF-. spring . , POST,

//delete user
@RequestMapping(value="users/doDelete", method = RequestMethod.POST)
public String deleteUser (@RequestParam Long id) {
    customerDAO.delete(id);
    return "redirect:/users";
}

,

<form th:action="@{/users/doDelete}" th:object="${customer}" method="post">
    <input type="hidden" th:field="${id}" />
    <button type="submit">Delete</button>
</form>

, Spring Security, post ( ). . Quick Checklist HTTP GET POST .

+11

:

<a th:href="@{'/users/doDelete/__${user.id}__}"><span>Delete</span></a>
+1

( Thymeleaf 3)

<a th:href="@{/users/doDelete/__${user.id}__}">Delete</a>
0

Source: https://habr.com/ru/post/1534508/


All Articles