Продължение
Closed this issue · 1 comments
Привет, Лъчо дебъгера го оправих както каза, тръгна вече. Пушнах и кода, че верно съм го била забравила.
Здравей!
Окей, ще се опитам да обясня... Когато създаваме един обект, например поръчка в твоя случай трябва да имаме една HTML форма с някакви контроли (input, dropdown, checkbox и т.н.) и method POST. Това означава, че се праща POST заявка към сървъра, а POST заявките се ползват като създаваме обект.
На сървъра тази пост заявка трябва да се обслужи по приблизително следния начин:
@PostMapping("/my-object")
public String createOffer(@Valid CreateMyObjectDto createMyObjectDto,
BindingResult bindingResult,
RedirectAttributes redirectAttributes) {
if (bindingResult.hasErrors()) {
redirectAttributes.addFlashAttribute("createOfferDto", createOfferDto)
.addFlashAttribute("org.springframework.validation.BindingResult.createOfferDto", bindingResult);
return "redirect:/my-object";
}
long myObjectId = myObjectService.createMyObject(createMyObjectDto);
return "redirect:/my-object/" + myObjectId;
}
Тук имаме следните неща:
CreateMyObjectDto
едно DTO, което описва контролите във формата- bindingResult - държи грешките
- redirectAttributes - добавя едирект атрибути
Контролерът трябва да се извика като натиснеш бутона за създаване на обект в браузъра. Заявката е POST. Ако има грешки трябва да редиректнеш към например /my-object
където се визуализират грешките. Това ще се отрази като GET заявка. За нея след малко. Ако няма грешки и валидацията е успешна, то тогава трябва да извикаш сървис, който да създаде обекта. Накрая трябва да насочиш потребителя към някаква Thank you страница или към страница, където се виждат детайлите на новия обект. Т.е. имаме следните неща:
- Един
@PostMapping("/my-object")
който служи за да създаде обект от данните идващи от браузъра - Един
@GetMapping("/my-object")
който да покаже празна форма ИЛИ такава със грешка. В един темплейт. - Един
@GetMapping("/my-object/<id>")
който служи, за да изпише Thank you или да покаже детайли за новосъздадения обект.
Този патърн се нарича post-redirect-get и е доста фундаментален без значение на програмния език или фреймуърк.
Опитвам се да го нарисувам.
Поздрави,
Л.