我有一个spring-boot
应用程序,带有Thymeleaf
。我有相当基本的情况。有一个表单,当用户单击“提交”按钮时,表单数据应发送到控制器,但在同一页面上应显示一条成功消息。
表格非常简单:
<form th:action="@{/suggest-event}" method="post">
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<div th:switch="${message}">
<div th:case="'Success'" class="alert alert-success">
<strong>Success!</strong> Operation performed successfully.
</div>
<div th:case="'Failed'" class="alert alert-danger">
<strong>Failure!</strong> Operation failed. Please try again
</div>
</div>
为了加载表格,我在控制器中使用了以下方法:
@GetMapping("/suggest-event")
public String suggestEvent(@RequestParam(value = "message", required = false) String message) {
model.addAttribute("message",message);
return "/suggested-event/suggestEvent";
}
然后是回答发布请求的方法:
@PostMapping("/suggest-event")
public String receiveSuggestedEvent( RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("message", "Success");
return "redirect:/suggest-event";
}
问题是,成功消息始终存在(第一次加载页面时以及在我提交表单之前)。我该如何解决?
最佳答案
您可以稍微更改一下代码:
@GetMapping("/suggest-event")
public String suggestEvent() {
return "/suggested-event/suggestEvent";
}
@PostMapping("/suggest-event")
public String receiveSuggestedEvent(BindingResult result, RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("message", "Failed");
redirectAttributes.addFlashAttribute("alertClass", "alert-danger");
if (result.hasErrors()) {
return "redirect:/suggest-event";
}
redirectAttributes.addFlashAttribute("message", "Success");
redirectAttributes.addFlashAttribute("alertClass", "alert-success");
return "redirect:/suggest-event";
}
我的解决方案以html显示消息:
<div th:if="${message}" th:text="${message}" th:class="${'alert ' + alertClass}"/>
但最重要的是替换addFlashAttribute而不是addAttribute并从@GetMapping中删除消息。