Я работаю над демонстрационным веб-сайтом, на котором необходимо отображать сообщение об ошибке, если поле «имя» сущности «Академия» уже существует. Я не могу отобразить «блок помощи».
Цели:
- Отображать на странице сообщение типа «Имя недоступно»
- An существующее имя вызывает нарушение уникального ограничения
- Обработать исключение с помощью блока try-catch?
Это блок html, который не сообщает об ошибке, обратите внимание, что элемент не 'не работает:
<form class="needs-validation" novalidate th:object="${academy}" th:action="@{/academy/new}" method="POST">
<input type="hidden" th:field="*{id}">
<div class="row">
<div class="col-sm-6 offset-sm-3 form-group form-check">
<label for="academy_name"> Name </label>
<input th:field="*{name}" id="academy_name" type="text" class="form-control" placeholder="academy name" required minlength="3" maxlength="255">
<small class="text-muted"> * Required. </small>
<span class="help-block" th:if="${#fields.hasErrors('*')}">
<label>ERRORS</label>
<ul>
<li th:each="err : ${#fields.errors('*')}" th:text="${err}"></li>
</ul>
</span>
</div>
</div>
<div class="col-sm-6 offset-sm-3 form-group form-check">
<button type="submit" class="btn btn-primary"> Add </button>
</div>
</form>
Вот мой класс контроллера, обратите внимание, что я проверяю, существует ли имя, поэтому я не получаю «нарушение уникального ограничения»:
@PostMapping("/academy/new")
public String saveAcademy(@Valid @ModelAttribute AcademyDTO academyDTO,
Model model, BindingResult bindingResult) {
log.debug("saveAcademy()");
if (academyService.existsByName(academyDTO.getName())) {
model.addAttribute("academy", academyDTO);
model.addAttribute("academies", academyService.findAll());
bindingResult.addError(new FieldError("academy", "name", "This name already exists"));
return ACADEMY_URL;
}
academyService.saveAcademy(academyDTO);
return "redirect:/academy";
}