2015-11-20 49 views
0

我有一個對象,我填寫表單「提交」的視圖。如何在重定向後保留模型屬性?

之後,它在視圖「return」中發佈對象「WelcomeMessageFinder」。

我使用該對象調用服務。如果服務失敗,我想重定向到「提交」視圖,並保持填充了以前值的表單。

我的問題是,我沒有找到如何保持重定向後的「WelcomeMessageFinder」對象。它總是創建一個新的空對象。

這裏是我的代碼:

@Controller 
@SessionAttributes("welcomeMessageFinder") 
public class SandBoxController extends PortalWebuiController { 
    @ModelAttribute("welcomeMessageFinder") 
    public WelcomeMessageFinder welcomeMessageFinder() { 
     return new WelcomeMessageFinder(); 
    } 

    @RequestMapping(value = "/submit", method = RequestMethod.GET) 
    public String submit(WelcomeMessageFinder welcomeMessageFinder, Model model, SessionStatus sessionStatus, HttpSession httpSession) { 
     // On Init : a new WelcomeMessageFinder is created 
     // After redirect : I want to keep the filled WelcomeMessageFinder but a new one is created ... 
     model.addAttribute("zenithUserSession", zenithUserSession); 
     return "submitwelcomemessage"; 
    } 

    @RequestMapping(value = "/return", method = RequestMethod.POST) 
    public String retun(
      WelcomeMessageFinder welcomeMessageFinder, 
      Model model, 
      RedirectAttributes redirectAttributes, 
      SessionStatus sessionStatus, HttpSession httpSession) { 
     // welcomeMessageFinder contains the parameters I enter in the form. 
     redirectAttributes.addFlashAttribute("welcomeMessageFinder", welcomeMessageFinder); 
     return "redirect:/submit"; 
    } 
} 

我能做些什麼來保持相同的WelcomeMessageFinder對象重定向之前和之後?

我覺得這個question,說我不能使用SessionAttributes重定向,因爲它不保留會話。它說使用RedirectAttributes但屬性似乎被重新初始化。

編輯:

我終於發現我的錯誤。此代碼有效,問題與我的課WelcomeMessageFinder。要在Flash會話中添加對象,該對象需要是可序列化的。我忘記在我的課程中實現Serializable。

添加後,它工作正常。

+0

[如何將模型屬性從一個Spring MVC控制器傳遞到另一個控制器?](http://stackoverflow.com/questions/7429649/how-to-pass-model-attributes-from-one-spring -mvc-controller-to-another-controlle) – nobeh

回答

1

我終於找到了我的錯誤。此代碼有效,問題與我的課WelcomeMessageFinder。要在Flash會話中添加對象,該對象需要是可序列化的。我忘記在我的課程中實現Serializable。

添加後,它工作正常。

0

這是因爲這一段代碼

"@ModelAttribute("welcomeMessageFinder") 
    public WelcomeMessageFinder welcomeMessageFinder() { 
     return new WelcomeMessageFinder(); 
    }" 

的。它總是執行任何請求映射方法之前

+0

我刪除了它,但它沒有改變任何東西。 – YLombardi

相關問題