【问题标题】:How to pass a complex ModelAttribute using redirect: in Spring MVC 3.0如何使用重定向传递复杂的 ModelAttribute:在 Spring MVC 3.0 中
【发布时间】:2011-12-17 10:54:41
【问题描述】:

大家好,我在寻找...的答案时遇到问题

用例:

在控制器中读取 Excel 电子表格。处理了 4 行工作表,第 2 行和第 3 行有一些错误,所以我跳过它们并继续进行其余的处理。但我想在处理完成后保留这些行以显示给用户。我想保留该行中的所有值以显示给用户,以提供足够的信息。

所以我试图做的是:

@RequestMapping(value = "/bulk-create", method = RequestMethod.POST)
public String bulkCreate(Model model, SpreadSheetFile spreadSheetFile){
  ...some code...

  List<Row> errorRows = new LinkedList<Row>();

  ...some code to process rows...

  //Error Found
  errorRows.add(row);

  ...more code to wrap up processing (possibly more errors)...

  model.addAttribute("erroRows", errorRows);
  return "redirect:/bulk-review"
}

@RequestMapping(value = "/bulk-review", method = RequestMethod.GET)
public String bulkReview(Model model, 
                         @ModelAttribute("errorRows")
                         LinkedList<Row> errorRows){
  model.addAttribute("errorRows", errorRows);
  return "bulk-review";
}

所以基本上我是在尝试将 LinkedList 从一个 MVC 方法传递到另一个而不实际首先点击页面(除非我误解了“重定向:”的工作原理......它首先调用控制器方法正确吗?)

当我在 bulkReview 方法中设置一个断点时,errorRows 是空的……那么如何在两个方法之间保留这个值呢?

感谢您的帮助!如果我需要澄清任何事情,请告诉我! :)

克里斯

【问题讨论】:

    标签: java spring-mvc controller modelattribute


    【解决方案1】:

    我认为重定向机制的工作方式与您想象的不同。第一个控制器将 URL 发送回用户的浏览器,然后浏览器会跟随该 URL。并且默认情况下,Spring 在重定向 URL 中将重定向时的任何数据放置在模型中,以便被重定向到的页面可以“看到”模型数据。但是,当模型中有复杂的数据时,这并不适用。

    因此,您需要考虑如何在浏览器发送回用户的重定向 URL 中传递数据。 List 如何序列化为 URL?可能不太好。

    另一种选择是将数据从一个控制器放入会话中并在第二个控制器中访问它。

    【讨论】:

    • 所以我最终这样做了:' model.addAttribute("errorList", errorList); model.addAttribute("totalRows", sheet.getLastRowNum()); model.addAttribute("totalProcessed", errorList.size() != sheet.getPhysicalNumberOfRows() ? sheet.getPhysicalNumberOfRows() - errorList.size() : 0);返回“批量审查”; ' 而不是进入另一个控制器方法,我通过一些验证来防止页面重新运行,因为我看到这种方式的缺点是,如果用户按下刷新它会再次运行以前的控制器方法。
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2021-09-09
    • 2013-06-28
    • 2017-11-27
    相关资源
    最近更新 更多