#spring #redirect #model #controller #transfer
#spring #перенаправление #Модель #контроллер #передача
Вопрос:
В этом примере я пытаюсь перенаправить метод контроллера handleSaveContact () из метода контроллера contactSuccessMsg (), но после передачи мне нужно отобразить сообщение об успешном обновлении или сбое в пользовательском интерфейсе, что возможно только в том случае, если я передаю данные модели из 1-го метода во 2-й.
Не мог бы кто-нибудь, пожалуйста, подсказать мне, как я могу передавать данные модели из одного метода контроллера в другой метод контроллера.
@GetMapping(value={"/", "/loadForm"})
public String loadContactForm(Model model) {
model.addAttribute("contact", new Contact());
return "index";
}
@PostMapping("/saveContact")
public String handleSaveContact(Contact contact, Model model) {
String msgTxt = null;
if(contact.getContactId()==null) {
msgTxt = "Contact Saved Successfully..!!";
}else {
msgTxt = "Contact Updated Successfully..!!";
}
contact.setIsActive("Y");
boolean isSaved = contactService.saveContact(contact);
if(isSaved) {
model.addAttribute("successMsg", msgTxt);
}else {
model.addAttribute("errorMsg", "Failed To Save Contact..!!");
}
return "redirect:/contactSuccessMsg";
}
/**
* To resolve Double Posting problem, redirecting the post req method to get request.
* @param contact
* @param model
* @return
*/
@GetMapping(value="/contactSuccessMsg")
public String contactSuccessMsg(Model model) {
model.addAttribute("contact", new Contact());
return "index";
}
Комментарии:
1. Я перенаправляю правильно с помощью этого кода, но мне также необходимо отобразить сообщение об успехе или сбое, которое присутствует в 1-м методе.
Ответ №1:
Я использовал Spring 3.2.3
1.) Добавлены RedirectAttributes RedirectAttributes в список параметров метода в controller1.
public String controlMapping1(
@ModelAttribute("mapping1Form") final Object mapping1FormObject,
final BindingResult mapping1BindingResult,
final Model model,
final RedirectAttributes redirectAttributes)
- Внутри метода добавлен код для добавления атрибута flash в RedirectAttributes
RedirectAttributes.addFlashAttribute(«mapping1Form», mapping1FormObject);
- Затем во втором компоненте используйте параметр метода, помеченный @ModelAttribute, для доступа к атрибутам перенаправления :
@ModelAttribute(«mapping1Form») конечный объект mapping1FormObject
Вот пример кода из контроллера 1:
@RequestMapping(value = { "/mapping1" }, method = RequestMethod.POST)
public String controlMapping1(
@ModelAttribute("mapping1Form") final Object mapping1FormObject,
final BindingResult mapping1BindingResult,
final Model model,
final RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("mapping1Form", mapping1FormObject);
return "redirect:mapping2";
}
Из Contoller 2:
@RequestMapping(value = "/mapping2", method = RequestMethod.GET)
public String controlMapping2(
@ModelAttribute("mapping1Form") final Object mapping1FormObject,
final BindingResult mapping1BindingResult,
final Model model) {
model.addAttribute("transformationForm", mapping1FormObject);
return "new/view";
}