1

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

用例:

在控制器中读取 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 是空的......那么我如何在两个方法之间保留这个值呢?

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

克里斯

4

1 回答 1

2

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

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

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

于 2011-10-28T17:08:51.430 回答