我使用Spring+Thymeleaf查看和修改数据库中的用户。我想将输入字段设置为原始用户的实际值,但我尝试过不同的样式,但都不起作用。
使用目前的配置,我可以更新用户信息并查看原始用户的id(它不在输入字段中(,但我不能在输入字段显示默认的实际配置。
控制器:
@GetMapping(value = {"/", ""})
public String subusersPage(HttpSession session, Model model) {
String idUser = BaseController.getLoggedUser(session);
UserDTO userDTO = userService.getUserById(idUser);
model.addAttribute("subusersDTO", userService.getSubusersDTO(userDTO.getSubusers()));
model.addAttribute("populations", userDTO.getPopulations());
model.addAttribute("configurations", userDTO.getConfigurations());
model.addAttribute("attributes", userDTO.getAttributes());
model.addAttribute("subuserDTO", new SubuserDTO());
return "subusers";
}
HTML:
<th:block th:each="subuserDTO_original : ${subusersDTO}">
<hr>
<form action="#" th:action="@{/subusers/__${subuserDTO_original.id}__}" th:object="${subuserDTO}" method="post">
<div>
<p th:text="${'Id: ' + subuserDTO_original.id}"></p>
<p>Name: <input type="text" th:field="*{name}" th:name="name" th:value="${subuserDTO_original.name}"/></p>
<p>Population: <input type="text" th:field="*{population}" th:name="population" th:value="${subuserDTO_original.population}"/></p>
<p>Configuration: <input type="text" th:field="*{configuration}" th:name="configuration" th:value="${subuserDTO_original.configuration}"/></p>
<p>Attributes: <input type="text" th:field="*{attributes}" th:name="attributes" th:value="${subuserDTO_original.attributes}"/></p>
<p>
<button type="submit" th:name="action" th:value="update">Update</button>
<button type="submit" th:name="action" th:value="delete">Delete</button>
<button type="reset" th:name="action" th:value="clear">Clear</button>
</p>
</div>
</form>
<form action="#" th:action="@{/subusers/__${subuserDTO_original.id}__}" method="get">
<button type="submit">Default</button>
</form>
</th:block>
任何帮助都将不胜感激,谢谢!
如果要编辑现有用户,则需要用原始用户的值填充th:object
(在本例中为${subuserDTO}
(。这是因为当您使用属性th:field="*{name}"
时,它实际上会覆盖html标记的name
、id
和value
(这就是th:value="${subuserDTO_original.name}"
不起作用的原因。
你可以做另外两个选择:
- 您也可以设置
name="name"
并使用th:value
- 或者,您可以使用
${subuserDTO_original}
作为th:object