Thymeleaf + Spring MVC Post / Redirect / Get

时间:2015-11-17 14:54:13

标签: java spring spring-mvc thymeleaf

我正在使用百日咳和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”。如果我离开页面,做其他的东西,然后返回旧的数据仍然会在那里。

在这个项目中,我们正在努力(尽我们所能)使用会话来存储数据。

0 个答案:

没有答案