首页 文章

如何在重定向后保留模型属性?

提问于
浏览
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说我可以't use SessionAttributes with redirect because it doesn't保持会话 . 它说使用RedirectAttributes,但属性似乎重新初始化 .

编辑:

我终于找到了我的错误 . 这段代码有效,问题出在我的类WelcomeMessageFinder上 . 要在Flash会话中添加对象,此对象必须是Serializable . 我忘了在我的 class 中实现Serializable .

添加后,它工作正常 .

2 回答

  • 1

    我终于找到了我的错误 . 这段代码有效,问题出在我的类WelcomeMessageFinder上 . 要在Flash会话中添加对象,此对象必须是Serializable . 我忘了在我的 class 中实现Serializable .

    添加后,它工作正常 .

  • 0

    这是因为这段代码

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

    . 它总是在调用任何requestmapping方法之前执行

相关问题