Как перенаправить с одного метода контроллера на другой метод с данными модели в приложении spring boot

#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)
 
  1. Внутри метода добавлен код для добавления атрибута flash в RedirectAttributes

RedirectAttributes.addFlashAttribute(«mapping1Form», mapping1FormObject);

  1. Затем во втором компоненте используйте параметр метода, помеченный @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";  
}