我有一个要求,用户从表单中选择一些数据,我们需要在下一页显示所选数据。
目前我们正在使用 session 属性来执行此操作,但这样做的问题是,如果第一页在另一个浏览器选项卡中打开,它会覆盖数据,再次选择并提交数据。所以我只想在将数据从一个 Controller 传输到另一个 Controller 时摆脱这个 session 属性。
注意:我使用的是基于 XML 的 Spring 配置,因此请展示使用 XML 而不是注释的解决方案。
最佳答案
在 handler
方法中定义 RedirectAttributes
方法参数,该方法处理第一页的表单提交
:
@RequestMapping("/sendDataToNextPage", method = RequestMethod.POST)
public String submitForm(
@ModelAttribute("formBackingObj") @Valid FormBackingObj formBackingObj,
BindingResult result,
RedirectAttributes redirectAttributes) {
...
DataObject data = new DataObject();
redirectAttributes.addFlashAttribute("dataForNextPage", data);
...
return "redirect:/secondPageURL";
}
flash 属性在重定向之前临时保存(通常在 session 中),并且在重定向之后可用于请求并立即删除。
上述重定向将导致客户端(浏览器)向/secondPageURL
发送请求。所以你需要有一个处理方法来处理这个请求,在那里你可以访问 submitForm
处理方法中设置的 DataObject 数据
:
@RequestMapping(value = "/secondPageURL", method = RequestMethod.GET)
public String gotoCountrySavePage(
@ModelAttribute("dataForNextPage") DataObject data,
ModelMap model) {
...
//data is the DataObject that was set to redirectAttributes in submitForm method
return "pageToBeShown";
}
此处 DataObject data
是包含来自 submitForm
方法的数据的对象。
关于java - 如何在不使用 Session 的情况下在 Spring 中将对象从一个 Controller 传递到另一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19586194/