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";
}

したがって、基本的に、実際に最初にページにアクセスすることなく、ある MVC メソッドから別の MVC メソッドに LinkedList を渡そうとしています (「redirect:」がどのように機能するかを誤解していない限り、最初にコントローラー メソッドが正しく呼び出されますか?)

bulkReview メソッドにブレーク ポイントを挿入すると、errorRows が空になります。では、2 つのメソッド間でこの値を保持するにはどうすればよいでしょうか。

助けてくれてありがとう!何か明確にする必要がある場合はお知らせください。:)

クリス

4

1 に答える 1

2

リダイレクトメカニズムがあなたが思っているように機能するとは思いません。最初のコントローラーは URL をユーザーのブラウザーに送り返し、ブラウザーはそれに従います。また、デフォルトでは、Spring はリダイレクト URL のリダイレクト時にモデルにデータを配置するため、リダイレクト先のページはモデル データを「見る」ことができます。ただし、モデルに複雑なデータがある場合、これはうまく機能しません。

したがって、ブラウザがユーザーに送り返すリダイレクト URL でデータがどのように渡されるかを考える必要があります。リストはどのように URL にシリアル化されますか? おそらくあまり良くない。

もう 1 つのオプションは、データを 1 つのコントローラーからセッションに入れ、2 番目のコントローラーでアクセスすることです。

于 2011-10-28T17:08:51.430 に答える