java - 如何在不使用 Session 的情况下在 Spring 中将对象从一个 Controller 传递到另一个 Controller

标签 java spring session spring-mvc

我有一个要求,用户从表单中选择一些数据,我们需要在下一页显示所选数据。

目前我们正在使用 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/

相关文章:

java - HTTP 400 的 Spring MVC 自定义消息

java - Coldfusion 到 Rails 的迁移,Java 代码保持不变

java - 数组列表和从文件中读取

java - 如何使用自定义登录页面纠正 Spring Security 异常?

database - PostgreSQL 服务器端准备好的语句的生命周期是多少

php - 匹配数组中的字符串 strpos() : Empty needle

mysql - 使用 Cakephp 单点登录

java - 如何执行 native 查询并获​​取反馈?

java - Pod 停留在挂起状态

java - 仅具有队列通信和性能测试的 Spring 应用程序