我正在使用百日咳和Spring MVC进行Post / Redirect / get thingy,它运行正常。除了当我到达执行GET的页面并进行刷新时,ModelAttribute被重置。这是我正在做的类似的片段。
@RequestMapping("/site")
public class SiteController {
@RequestMapping(values = {"", "/"}, method = RequestMethod.GET)
public String index(@ModelAttribute("form") Form form, Model model) {
return "/site/index";
}
@RequestMapping(values = {"/postit"}, method = RequestMethod.POST)
public String indexPoster(@ModelAttribute("form") Form form, Model model, RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("form", form);
return "redirect:/site/result";
}
@RequestMapping(values = {"/result"}, method = RequestMethod.GET)
public String indexResult(@ModelAttribute("form") Form form, Model model) {
// This will print the form, but if I do a page reload, the form properties will be reset.
System.out.println(form);
return "/site/result";
}
}
我的Form
对象只是一个简单的java bean,其中有一个名为name
的String属性,显然我的真实表单有一个属性,但这是为了简单起见。
在/ site / index的html页面上,我有一个使用th:object="${form}"
和th:field="*{name}"
的简单表单,其中发布了/postit
的帖子。在我的/ site / result上,我只输出在表单中输入的名称。 (所以现在它就像是一个Hello World :))。
此流程适用于我,但如果我在加载/ site / result后点击刷新,indexResult
中的表单变量将被重置。
我尝试过使用
private Form form;
@ModelAttribute("form")
public Form getForm() {
if (this.form == null) {
this.form = new Form();
}
return this.form;
}
在班级,但感觉“hacky”。如果我离开页面,做其他的东西,然后返回旧的数据仍然会在那里。
在这个项目中,我们正在努力(尽我们所能)使用会话来存储数据。