我有一个对象,我在视图中填写表单"提交"。
之后,它会发布对象" 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。我忘了在班上实现Serializable。
添加后,它可以正常工作。
答案 0 :(得分:1)
我终于找到了我的错误。这段代码有效,问题出在我的类WelcomeMessageFinder上。要在Flash会话中添加对象,此对象必须是Serializable。我忘了在班上实现Serializable。
添加后,它可以正常工作。
答案 1 :(得分:0)
这是因为这段代码
"@ModelAttribute("welcomeMessageFinder")
public WelcomeMessageFinder welcomeMessageFinder() {
return new WelcomeMessageFinder();
}"
。它总是在调用任何请求映射方法之前执行