我请求帮助是因为thymeleaf做了一件奇怪的事:这是我的表格:
<form action="#" th:action="@{/add-new-board}" method="post">
<p>Board name: <input type="text" th:name="board" th:field="${board.name}" /></p>
<p th:if="${#fields.hasErrors('board.name')}" th:errors="${board.name}">Name Error</p>
<p>Section #1 name: <input type="text" th:name="section" th:field="${section.name}" /></p>
<p th:if="${#fields.hasErrors('section.name')}" th:errors="${section.name}">Name Error</p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
这是我的控制器:
@GetMapping(path = "/add-new-board")
public String addNewBoardForm(Model model) {
model.addAttribute("board", new Board());
model.addAttribute("section", new Section());
return "fragments/forms/add-new-board";
}
@PostMapping(path = "/add-new-board")
public String addNewBoardSubmit(@Valid @ModelAttribute Board board,
@Valid @ModelAttribute Membership membership,
@Valid @ModelAttribute Section section,
@AuthenticationPrincipal UserDetailsImpl principal,
BindingResult result,
RedirectAttributes attributes) {
if (result.hasErrors()) {
attributes.addFlashAttribute("create_board_fail", "Check if you have all fields");
return "fragments/forms/add-new-board";
} else {
board.setCreated_at(LocalDateTime.now());
Slugify slug = new Slugify();
board.setSlug(slug.parse(board.getName()));
boardRepository.save(board);
User user = userRepository.findByEmail(principal.getEmail()).get();
membership.setMember_type(MemberType.MANAGER);
membership.setBoardId(board);
membership.setUserId(user);
membershipRepository.save(membership);
section.setBoard(board);
section.setColor(ColorType.BLUE_BASIC);
section.setOrdering(1);
sectionRepository.save(section);
attributes.addFlashAttribute("create_board_success", "You successfully added a new board!");
return "redirect:/";
}
因此,我的目标是将第一个输入到“board”表的文本插入到“name”列,并将第二个输入到“section”表的文本插入到“name”列。所以这个专栏的标题是相似的。现在,当我运行代码、填充输入并提交它时,我将进入我的数据库:
数据库表img
其中“aaa”是我在第一个输入中写的,而“bbb”是在第二个输入中写的
1条答案
按热度按时间oymdgrw71#
这是因为你正在使用
th:field
不正确。th:field
设计用于单个th:object
但现在你用的是两个不同的对象board
以及section
. 当呈现html时,两个输入可能具有相同的name="name"
提交时,这些值被连接在一起,您就可以看到所看到的行为。您应该将board和section添加到单个对象中,并将其用作窗体。例如,如果您创建了
BoardForm
对象:将其添加到模型中
那么你的html会是这样的