spring thymeleaf - 从 html 表中删除对象并将 id 传递给控制器
Posted
技术标签:
【中文标题】spring thymeleaf - 从 html 表中删除对象并将 id 传递给控制器【英文标题】:spring thymeleaf - delete object from html table and pass id to controller 【发布时间】:2017-09-22 04:42:09 【问题描述】:我将一个包含对象的列表从我的控制器传递到我的 html,然后 thymeleaf 为列表中的每个对象创建一个。
我想通过一个按钮删除一个条目并将对象 ID 传递给我的控制器,以便从数据库中删除它。
但是,当我在控制器中处理发布请求时,id 属性是空的。
带有 Thymeleaf 的 HTML:
<tbody>
<tr th:each="user : $users">
<td th:text="$user.personId"></td>
<td th:text="$user.firstName"></td>
<td th:text="$user.lastName"></td>
<td>
<form th:action="@delete_user" method="post" th:object="$user">
<input type="hidden" th:field="$user.personId"/>
<button type="submit" value="Submit" class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
</tbody>
控制器:
@RequestMapping(value = "/delete_user", method = RequestMethod.POST)
public String handleDeleteUser(@ModelAttribute("user") User user)
System.out.println(user.getPersonId());
System.out.println("test");
return "redirect:/external";
我怎样才能做到这一点? 还是有别的办法?
谢谢!
【问题讨论】:
【参考方案1】:您可以尝试将th:action="@delete_user"
更改为th:action="@/delete_user"
。
或者您可以使用路径变量/查询字符串并使用 get 方法传递 id。
例如
html:
<a th:href="|@/delete_user/$user.personId|" class="btn btn-danger">Delete</a>
控制器:
@RequestMapping(value = "/delete_user/personId", method = RequestMethod.GET)
public String handleDeleteUser(@PathVariable String personId)
System.out.println(personId);
System.out.println("test");
return "redirect:/external";
或
html:
<a th:href="@/delete_user(personId=$user.personId)" class="btn btn-danger">Delete</a>
控制器:
@RequestMapping(value = "/delete_user", method = RequestMethod.GET)
public String handleDeleteUser(@RequestParam(name="personId")String personId)
System.out.println(personId);
System.out.println("test");
return "redirect:/external";
【讨论】:
使用 method=GET 删除用户,这是一个好习惯吗? @user641887 其实这里并不是通过GET方式删除用户,只是通过GET方式传递了一个id,删除操作可以通过一些POST方式的web服务来进行。 我能够使用 - RequestParam 注释获得删除工作。删除不适用于@PathVariable。试图了解它们的不同之处。 实际上,我得到了它的双向工作。忽略我上面的评论。在 Spring 中实现 Delete 的更好方法是什么 - RequestParam 或使用 PathVariable【参考方案2】:下面是视图部分。
<tbody>
<tr th:each="income : $incomes">
<td th:text="$income.createDate"></td>
<td th:text="$income.name"></td>
<td th:text="$income.description"></td>
<td th:text="$income.amount"></td>
<td><a th:href="@/income/edit/id(id=$income.id)" class="btn btn-primary"><i class="fas fa-user-edit ml-2"></i></a></td>
<td><a th:href="@/income/delete/id(id=$income.id)" class="btn btn-primary"><i class="fas fa-user-times ml-2"></i></a></td>
</tr>
</tbody>
下面是控制器
@GetMapping("/delete/id")
public String deleteIncome(@PathVariable(value = "id") Long id,Model model)
Income note = incomeRepo.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Income", "id", id));
incomeRepo.delete(note);
model.addAttribute("incomes",incomeRepo.findAll());
return "viewIncome";
在视图部分的上述代码中,我将 id 传递给控制器。然后在controller中通过查找id,删除相关记录。
【讨论】:
【参考方案3】:带有 Thymeleaf 的 HTML:
<table class="table table-responsive">
<th >
<td>ID</td>
<td>Name</td>
<td>Address</td>
<td>Delete</td>
</th>
<tr th:each="student : $students">
<td th:text="$student.id"/>
<td th:text="$student.name"/>
<td th:text="$student.address"/>
<td >
<form th:action="@delete" method="post">
<input type="hidden" name="id" th:value="$student.id" />
<input type="submit" value="Delete" class="btn btn-danger" />
</form>
</td>
</tr>
</table>
控制器:
@RequestMapping(value = "/delete", method = RequestMethod.POST)
private String deleteStudent(@RequestParam String id)
System.out.println("Student_Id : "+id);
return "redirect:/display";
或
带有 Thymeleaf 的 HTML:
<table class="table table-responsive">
<th >
<td>ID</td>
<td>Name</td>
<td>Address</td>
<td>Delete</td>
</th>
<tr th:each="student : $students">
<td th:text="$student.id"/>
<td th:text="$student.name"/>
<td th:text="$student.address"/>
<td >
<a th:href="@delete/__$student.id__" class="btn btn-danger">Delete</a>
</td>
</tr>
</table>
控制器:
@RequestMapping(value = "/delete/id")
private String deleteStudent(@PathVariable(name = "id") String id)
System.out.println("Student_Id : "+id);
return "redirect:/display";
【讨论】:
以上是关于spring thymeleaf - 从 html 表中删除对象并将 id 传递给控制器的主要内容,如果未能解决你的问题,请参考以下文章
Thymeleaf/Spring - 将项目从组合框添加到表中
使用 Thymeleaf 和 Spring Boot 将我的 HTML 中的整数数组传递给控制器
在thymeleaf spring框架中从本地目录插入图像(使用maven)