У меня есть объект (цель), состояние которого я хочу перенести из GET в контроллер POST без перечисления каждого столбца в шаблоне Thymeleaf.
Итак, когда я отправляю объект Goal
с 12 полями, а пользователь добавляет только 3, я не потеряю другие.
Во многих статьях указывалось, что я должен сделать следующее:
- Используйте
@SessionAttributes
для класса глобально - Добавьте
@ModelAttribute
в качестве входного параметра в POST-контроллере.
Удивительно, но у меня это работает без добавления @ModelAttribute
. Просто с @SessionAttributes
в главе класса.
Вопрос: Нужно ли @ModelAttribute
при использовании @SessionAttributes
и почему? И если да, то почему он работает как брелок в моем контроллере с просто @SessionAttributes
и без упоминания Goal
в качестве @ModelAttribute
параметра моего метода POST?
Код указан ниже:
@Controller
@SessionAttributes("goal")
public class GoalController {
@PostMapping("/goal")
public String save (Goal goal, RedirectAttributes redirect, SessionStatus sessionStatus) {
goalService.save(goal);
sessionStatus.isComplete();
return "redirect:" + WEB_URL;
}
@GetMapping(goal/edit/{id}")
public String edit (@PathVariable Long id, Model model) {
Goal goal = goalService.getById(id);
model.addAttribute("goal", goal);
return WEB_FORM_URL;