使用 Thymeleaf 迭代卡片,然后将所选卡片的值发送到模型
Using Thymeleaf to iterate cards then send value of selected card to model
我正在使用 thymeleaf 为列表中的所有对象吐出卡片,但我希望用户能够单击其中一张卡片上的按钮,然后让我的后端知道哪张卡片(baseElement.name
) 已通过发回 baseElement
的名称进行 select 编辑。这对于下拉菜单而不是卡片来说效果很好,但我更愿意使用卡片来获得用户体验。
在调试模式下,我看到 selectedElementName
返回为空字符串,因此我尝试用 baseElement.name
填充它的地方似乎不起作用。
查看:
<th:block th:each="baseElement : ${baseElements}">
<div class="col-md">
<form class="form-horizontal" method="post"
th:action="@{/account/baseElementLevel}" th:object="${selectedElementName}">
<div class="card text-center g-4">
<div class="card-header">Base Element</div>
<div >
<div class="card-body">
<h5 class="card-title" name="selectedElementName" id="selectedElementName" th:value="${baseElement.name}" th:text="${baseElement.name}"></h5>
<p class="card-text" th:text="${baseElement.briefDescription}"></p>
<button class="btn btn-primary form-control" type="submit">Enter</button>
</div>
</div>
<div class="card-footer text-muted">Entry Points:</div>
</div>
</form>
</div>
</th:block>
控制器:
@RequestMapping(value = "/baseElementLevel", method = RequestMethod.GET)
public String baseElementLevel(Model model, Principal principal) {
User user = userService.findByUsername(principal.getName());
List<BaseElement> baseElements = elementService.findByUserUserIdAndType(user.getUserId(), "BASE");
model.addAttribute("baseElements", baseElements);
model.addAttribute("selectedElementName", "");
model.addAttribute("baseElement", "");
model.addAttribute("amount", "");
return "baseElementLevel";
}
@RequestMapping(value = "/baseElementLevel", method = RequestMethod.POST)
public String baseElementLevelPOST(@ModelAttribute("amount") String amount,
@ModelAttribute("selectedElementName") String selectedElementName, Principal principal) {
User user = userService.findByUsername(principal.getName());
user.setSelectedBaseElement(
elementService.findByNameAndUserUserId(selectedElementName, user.getUserId()).getId());
userService.save(user);
return "redirect:/account/elementView";
}
我正在尝试显示一个元素列表,以便每个元素都有一张显示元素信息的卡片,然后在每张卡片上有一个按钮 post 并告诉控制器用户使用哪张卡片 selected.
如果我用 select 下拉列表替换卡片,我可以让它正常工作,但不确定如何让每个列表项与卡片对齐。
感谢您的帮助。
当您提交表单时,<h5 />
s 没有被提交。您可以为此使用隐藏的表单元素:
<div class="card-body">
<h5 class="card-title" th:text="${baseElement.name}" />
<input type="hidden" name="selectedElementName" th:value="${baseElement.name}" />
<p class="card-text" th:text="${baseElement.briefDescription}" />
<button class="btn btn-primary form-control" type="submit">Enter</button>
</div>
我正在使用 thymeleaf 为列表中的所有对象吐出卡片,但我希望用户能够单击其中一张卡片上的按钮,然后让我的后端知道哪张卡片(baseElement.name
) 已通过发回 baseElement
的名称进行 select 编辑。这对于下拉菜单而不是卡片来说效果很好,但我更愿意使用卡片来获得用户体验。
在调试模式下,我看到 selectedElementName
返回为空字符串,因此我尝试用 baseElement.name
填充它的地方似乎不起作用。
查看:
<th:block th:each="baseElement : ${baseElements}">
<div class="col-md">
<form class="form-horizontal" method="post"
th:action="@{/account/baseElementLevel}" th:object="${selectedElementName}">
<div class="card text-center g-4">
<div class="card-header">Base Element</div>
<div >
<div class="card-body">
<h5 class="card-title" name="selectedElementName" id="selectedElementName" th:value="${baseElement.name}" th:text="${baseElement.name}"></h5>
<p class="card-text" th:text="${baseElement.briefDescription}"></p>
<button class="btn btn-primary form-control" type="submit">Enter</button>
</div>
</div>
<div class="card-footer text-muted">Entry Points:</div>
</div>
</form>
</div>
</th:block>
控制器:
@RequestMapping(value = "/baseElementLevel", method = RequestMethod.GET)
public String baseElementLevel(Model model, Principal principal) {
User user = userService.findByUsername(principal.getName());
List<BaseElement> baseElements = elementService.findByUserUserIdAndType(user.getUserId(), "BASE");
model.addAttribute("baseElements", baseElements);
model.addAttribute("selectedElementName", "");
model.addAttribute("baseElement", "");
model.addAttribute("amount", "");
return "baseElementLevel";
}
@RequestMapping(value = "/baseElementLevel", method = RequestMethod.POST)
public String baseElementLevelPOST(@ModelAttribute("amount") String amount,
@ModelAttribute("selectedElementName") String selectedElementName, Principal principal) {
User user = userService.findByUsername(principal.getName());
user.setSelectedBaseElement(
elementService.findByNameAndUserUserId(selectedElementName, user.getUserId()).getId());
userService.save(user);
return "redirect:/account/elementView";
}
我正在尝试显示一个元素列表,以便每个元素都有一张显示元素信息的卡片,然后在每张卡片上有一个按钮 post 并告诉控制器用户使用哪张卡片 selected.
如果我用 select 下拉列表替换卡片,我可以让它正常工作,但不确定如何让每个列表项与卡片对齐。
感谢您的帮助。
<h5 />
s 没有被提交。您可以为此使用隐藏的表单元素:
<div class="card-body">
<h5 class="card-title" th:text="${baseElement.name}" />
<input type="hidden" name="selectedElementName" th:value="${baseElement.name}" />
<p class="card-text" th:text="${baseElement.briefDescription}" />
<button class="btn btn-primary form-control" type="submit">Enter</button>
</div>