当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf将参数从html发送到控制器

卢嘉誉
2023-03-14

我是百里香菜鸟。我试图创建一个简单的crud应用程序。我试图在删除按钮上删除客户类的对象。我如何使用百里香叶为调用deleteUser的方法设置参数(例如- id)。这是我的控制器。

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";
    }
}

以下是我的看法。

<!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>

共有3个答案

阎弘雅
2023-03-14

路径变量可以设置为:

<a th:href="@{/users/doDelete/__${user.id}__}"><span>Delete</span></a>
燕禄
2023-03-14

Blejzer的答案是一个简单而直接的解决方案,除非您也在使用Spring Security(始终建议),在这种情况下,您应该选择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";
}

在表单中添加一个隐藏字段,该字段以id作为名称发布,并在隐藏参数中显示其值

<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。从长远来看,在网上为你省去许多麻烦。请看一下选择HTTP GET或POST的快速清单,了解详细信息。

谈秦斩
2023-03-14

您不需要表单即可执行此操作:

<td>
    <a th:href="@{'/users/doDelete/' + ${user.id}}">
        <span>Delete</span>
    </a>
</td>
 类似资料:
  • 问题内容: 我必须将数据从html页面(带有很少输入文本字段的简单形式)发送到页面控制器,然后再发送到数据库。我正在使用3.0版的百里香2.0.17。我搜索并检查了一些解决方案,但是没有用。也许有人遇到了同样的问题,并找到了一些好的解决方案。请帮忙。谢谢 问题答案: 如本教程所建议,你需要使用,并在中创建一个表单。 看起来像这样: 控制器: HTML: Foo.java: 希望这可以帮助。

  • 我在将对象列表从Thymeleaf保存到控制器时遇到了一个大问题。thymeleaf中的对象列表由Jquery生成。但我不知道如何将数据传输到控制器,对象列表不知道大小。因为用户可以随时添加它。请帮助我将thymeleaf中的列表对象发送给控制器。 我创建了一个具有1个属性的新类:ArrayList loaiDoans;“LoaiDoan”是我想要保存的对象。使用该类是将列表“loaidon”从t

  • 我很难在Thymeleaf帖子中绑定一个ObjectList。 我正在尝试使用Spring5和ThymeLeaf来实现以下要求 我计划在每行添加一个删除按钮。和一个Submit按钮,用于将所有剩余行保存在DB中。 如何将eachRowList转发到另一个控制器(用于删除操作和数据库保存)。 更新1: 修改视图 最终更新: 显然th:field输入标签不会绑定在thead部分(它不应该有输入字段Lo

  • 我有这个代码,但它不起作用(我认为它是th:action=“@{/employee}”,因为它想从我这里输入html href)对不起我的英语)) 如果你知道,帮帮我,pleace))) 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.2.发布.... 1.8 在此输入图像说明

  • 我试图在Joomla组件中构建我的第一个jSON表单提交。 从Joomla控制器发送超文本标记语言响应是否有任何特殊的编码或条件? 我使用的是2.5 Joomla MVC。以下是一些测试/观察结果- 1) 表单提交和响应已单独测试,并按预期工作。我有一个separarate PHP文件,它被提交到一个服务器端PHP文件,该文件接受jSON数据并发送一个HTML响应,客户端根据响应进行正确更新。 2

  • 我有使用Springboot和Thymeleaf模板编写的简单Web应用程序。报告控制器从表单接收数据并构建TestPlanReportReportACK对象,该对象作为模型属性添加如下: 我可以在“图表”thymeleaf模板中使用该数据并显示我需要的数据,但我需要在单击按钮时将完全相同的对象发送回控制器,但我得到TestPlanReportACK对象作为设置空值的参数。 以下是我的按钮在图表模