我想将所有字段的HTML表绑定到Spring Boot中的Java代码。 因此,我也用Postmapping注释了我的方法。
我已经能够显示Thymeleaf中的所有字段,并且还能够相应地设置checkBox值(true / false)。
这是我的Thymeleaf HTML代码:
<form action="#" th:action="@{/mitarbeiterverwaltung}" th:object="${users}" method="post">
<fieldset>
<table border="1" align="center">
<thead>
<tr>
<!-- <th:text = "#{mitarbeiterverwaltung.active}>Active ( Tick ) / Passive</th>-->
<th>Active ( Tick ) / Passive</th>
<th>ID</th>
<th>Username</th>
<th>Anzeigename</th>
<th>Dienstnummer</th>
</tr>
</thead>
<tbody>
<tr th:each="user, itemStat : *{users}">
<td><input th:field="*{users[__${itemStat.index}__].isActive}"
th:checked="${user.isActive}"
class="checkBox"
type="checkBox"
name="checkBox"
/></td>
<td><input th:field="*{users[__${itemStat.index}__].id}"
readonly/></td>
<td><input th:field="*{users[__${itemStat.index}__].username}"
readonly/></td>
<td><input class="anzeigename"
type="text"
name="anzeigename"
th:field="*{users[__${itemStat.index}__].anzeigename}"
th:id="${itemStat.index}"
readonly/></td>
<td><input class="dienstnummer"
type="text"
name="dienstnummer"
th:field="*{users[__${itemStat.index}__].dienstnummer}"
th:id="${itemStat.index}"
readonly/></td>
</tr>
</tbody>
</table>
<br />
<div style="text-align:center;">
<input type="submit" id="submitButton" th:value="Speichern"/>
</div>
</fieldset>
这是我的Java代码,其中UserCreationDto的isActive字段始终为空。
@PostMapping
public String updateActivePassiveUser(@ModelAttribute UserCreationDto userTableSettings,
@RequestParam("checkBox") String checkBoxName, BindingResult result, Model model, Errors errors) {
logger.info("Method {} called in {}", new Object() {}.getClass().getEnclosingMethod().getName(), this.getClass().getName());
if (errors.hasErrors()) {
logger.error("Error in {}", new Object() {}.getClass().getEnclosingMethod().getName());
return "error";
}
List<Benutzer> users = userManagementServiceImpl.getAllUsers();
userManagementServiceImpl.updateActivePassiveUser(1, 0);
return "redirect:/mitarbeiterverwaltung?success";
}
这是Java代码中该字段的图片,其中该方法使用@PostMapping注释
我的@RequestMapping也是如此:
这是我的@RequestMapping方法:
@RequestMapping
public String showUserManagement(Model model) {
logger.info("Method {} called in {}", new Object() {}.getClass().getEnclosingMethod().getName(), this.getClass().getName());
List<Benutzer> users = userManagementServiceImpl.getAllUsers();
userForm = userManagementServiceImpl.saveUserForm(users);
model.addAttribute("users", userForm);
return "mitarbeiterverwaltung";
}
我的UserCreationDto,所有字段都添加到列表中:
public class UserCreationDto {
private List<User> users = new ArrayList<>();
public void addUser(User user) {
this.users.add(user);
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
还有我所有字段的简单POJO类
@Data
public class User {
//@SafeHtml prevents XSS ( Cross-Site Scripting )
@SafeHtml
private String username;
private String password;
private String anzeigename;
private String dienstnummer;
private long id;
private Boolean isActive;
}
我的Java代码中填充了其他字段,例如anzeigename,dienstnummer,id和username,但是isactive始终为空。
也许,有人可以告诉我我在做什么错了。
非常感谢您。
答案 0 :(得分:0)
我认为您必须设置许多选项。您不需要th:checked:
<input th:field="*{users[__${itemStat.index}__].isActive}"
class="checkBox"
type="checkBox"
name="checkBox" />
答案 1 :(得分:0)
我现在找到了另一种方法,但这并不是很好。
@PostMapping
public String updateActivePassiveUser(@Valid @ModelAttribute("userForm") UserCreationDto userTableSettings,
@RequestParam List<String> searchValues, BindingResult result, Model model, Errors errors) {
字段searchValues包含所有选中的复选框。 这是我的看法:
<td><input type="checkbox"
name="searchValues"
th:value="${user.id}"
th:checked="${user.isActive}"
/>
现在,我唯一的问题是如何更新Postgresql中布尔类型的列?
为完成此任务,我称之为:
userRepo.updateActivePassiveUser(new Boolean("False"), id);
@Modifying
@Query(value = "UPDATE benutzer SET active = :active WHERE id = :id", nativeQuery = true)
@Transactional
void updateActivePassiveUser(@Param("active") Boolean active, @Param("id") long id);
但是,我数据库中的值永远不会改变。
也许有人可以给我最后的提示!