我想在Thymeleaf中验证我的表单输入,但我在视图中看不到错误消息。我可以在调试器模式下看到来自BindingResults的每条消息,我无法弄清楚为什么我在模板中看不到它。
这是我的控制器部分:
@RequestMapping(value = "/add-doctor", method = RequestMethod.POST)
public String addDoctor(@Valid @ModelAttribute("doctorForm") DoctorDTO doctorForm, BindingResult result, ModelMap model, RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
redirectAttributes.addFlashAttribute("doctorForm", doctorForm);
return "redirect:/doctor/new-doctor";
} else {
doctorApplicationService.addNewDoctor(doctorForm);
}
model.addAttribute("doctorForm", doctorForm);
return "redirect:/doctor";
}
这是我的表格:
<form method="post" th:action="@{/add-doctor}" th:object="${doctorForm}" id="docForm" class="form-horizontal">
<div class="form-group">
<label for="docNum" class="col-md-2 control-label">Number lekarza</label>
<div class="col-md-10">
<p type="text" class="form-control" id="docNum">PLXXX888</p>
</div>
</div>
<div class="form-group">
<label for="name" class="col-md-2 control-label">Imię</label>
<div class="col-md-10">
<input th:field="*{name}" type="text" class="form-control" id="name" placeholder="Imię"/>
<p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Description errors</p>
</div>
</div></form>
[编辑]
那是@m-deinum在评论中说:
因为您在发生异常时正在进行重定向。这会破坏模型,因此不会出现错误和消息
解决方案:
@RequestMapping(value = "/add-doctor", method = RequestMethod.POST)
public String addDoctor(@Valid @ModelAttribute("doctorForm") DoctorDTO doctorForm, BindingResult result, ModelMap model, RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
redirectAttributes.addFlashAttribute("doctorForm", doctorForm);
return "doc-layout";
} else {
doctorApplicationService.addNewDoctor(doctorForm);
}
model.addAttribute("doctorForm", doctorForm);
return "redirect:/doctor";
}