Я знаю, что "$ {# fields.hasErrors ('*')}" всегда ложно, потому что перенаправление. (верно?)
Верно. Похоже, вы всегда перенаправляете. Из-за этого вызывается метод, помеченный @GetMapping("/event/{id}")
, форма, скорее всего, сбрасывается в состояние fre sh, и больше нет ошибок, делающих выражение всегда false
.
Как вернуться к этому пути / событию / {id} без перенаправления?
Просто вернуть имя представления (шаблона), содержащего форму. Скорее всего, это то же самое, что возвращается методом, помеченным @GetMapping("/event/{id}")
.
. Вы должны следовать подходу из этого руководства . Возврат без перенаправления, если форма содержит ошибку, и перенаправление в противном случае.
Редактировать: Вы также должны предоставить дополнительные объекты для модели. Вместо заполнения модели в каждом методе (Get, Post et c.) Вы можете извлечь общие объекты в метод, помеченный @ModelAttribute
. Согласно javado c такой метод может принимать параметры, аналогичные методам, помеченным @RequestMapping
.
В вашем случае что-то подобное должно работать нормально:
@ModelAttribute
void supplyModel(@PathVariable("id") long id, Model model) {
Event event = eventoRepository.findById(id).get();
model.addAttribute("event", evento);
model.addAttribute("guests", event.getGuests());
model.addAttribute("guest",new Guest());
}
@GetMapping("/event/{id}")
public String eventDetail(@PathVariable("id") long id) {
return "event/details";
}
@PostMapping("/event/{id}")
public String save(@PathVariable("id") long id, @Valid Form form, BindingResult bindingResult ) {
if (bindingResult.hasErrors()) {
// Has errors
return "event/details";
}
// No errors
return "redirect:/event/" + id;
}