gpt4 book ai didi

html - 我可以在 Spring Boot 应用程序中从 Thymeleaf 表发出 HTTP POST 请求吗

转载 作者:搜寻专家 更新时间:2023-10-31 08:03:46 26 4
gpt4 key购买 nike

我在一个简单的 Spring Boot 应用程序中有一个 Thymeleaf 模板。该模板包含一个表中的列表,如下所示:

<p>There are <span th:text="${#lists.size(persons)}"></span> people:</p>
<table th:if="${not #lists.isEmpty(persons)}" border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Address</th>
<th>Telephone</th>
<th>Email</th>
<th>Actions</th>
</tr>
<tr th:each="person : ${persons}">
<td th:text="${person.personId}"></td>
<td th:text="${person.name}"></td>
<td th:text="${person.address}"></td>
<td th:text="${person.telephone}"></td>
<td th:text="${person.email}"></td>
<td>
<a href="#" data-th-href="@{/edit(personId=${person.personId})}">Edit</a> |
<a href="#" data-th-href="@{/delete(personId=${person.personId})}">Delete</a>
</td>
</tr>
</table>

我想根据表格中的最后一个单元格启用编辑和删除功能。但目前这两个请求都是针对 HTTP GET 的。这对于从服务器获取个人详细信息进行编辑的编辑来说很好,但是由于服务器上的数据更改,删除应该触发 POST 请求。

有谁知道 Thymeleaf 是否允许表格的每行一个 POST 请求?或者我是否必须每行编写一个简单的 HTML 表单?

GET 表单目前是:

<td>
<a href="#" data-th-href="@{/edit(personId=${person.personId})}">Edit</a>
<!--a href="#" data-th-href="@{/delete(personId=${person.personId})}">Delete</a></td-->
<form method="get" th:action="@{/edit(personId=${person.personId})}">
<button type="submit" name="submit" value="value">Edit</button>
</form>
</td>

我有一个链接和一个用于测试的表格。

要调用的 Controller 方法是:

// Gets a Person.
@RequestMapping(value="/edit", method=RequestMethod.GET)
public String getEditPerson(@RequestParam("personId") String personId, Model model) {
logger.info(PersonController.class.getName() + ".getEditPerson() method called.");

Person person = personDAO.get(Integer.parseInt(personId));
model.addAttribute("person", person);

// Set view.
return "/edit";
}

调用按钮版GET时的错误是:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Jul 24 00:26:16 BST 2016
There was an unexpected error (type=Bad Request, status=400).
Required String parameter 'personId' is not present`

我正在使用 GET 来触发编辑,因为除了 personId 之外,这里没有数据发送到服务器。未执行任何数据库操作,因此它应该是 GET。

最佳答案

您正在使用链接,我认为这是不可能的,您需要使用一个表单,您可以在其中指定要使用的 POST 方法。

在下面的示例中,我使用了 <button>而不是 <a>元素,但它会起作用,你唯一需要做的就是用 CSS 设置你的按钮样式,使其看起来像你的链接

<form method="POST" th:action="@{/edit(personId=${person.personId})}">
<button type="submit" name="submit" value="value" class="link-button">This is a link that sends a POST request</button>
</form>

现在你的代码应该是这样的

<tr th:each="person : ${persons}">                
<td th:text="${person.personId}"></td>
<td th:text="${person.name}"></td>
<td th:text="${person.address}"></td>
<td th:text="${person.telephone}"></td>
<td th:text="${person.email}"></td>
<td>
<form method="POST" th:action="@{/edit(personId=${person.personId})}">
<button type="submit" name="submit" value="value" class="link-button">EDIT</button>
</form> |
<form method="POST" th:action="@{/delete(personId=${person.personId})}">
<button type="submit" name="submit" value="value" class="link-button">DELETE</button>
</form>
</td>
</tr>

编辑

正如您刚刚分享的 Java 代码,在 Controller 中您期望 personId 不是 PathVariable,而是 RequestParam,在那种情况下,您的表单应该具有该值...

编辑您的表单并添加人员 ID,如下所示。

<form method="POST" th:action="@{/edit}">
<input type="hidden" name="personid" id="personId" th:value="${person.personId}" />
<button type="submit" name="submit" value="value" class="link-button">This is a link that sends a POST request</button>
</form>

另请注意,我将表单的操作更改为/edit,因为它是您的 Controller 的样子

关于html - 我可以在 Spring Boot 应用程序中从 Thymeleaf 表发出 HTTP POST 请求吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com