Как передать сложный атрибут ModelAttribute с помощью перенаправления: в Spring MVC 3.0

Привет всем вопросом У меня проблемы с поиском ответа для...

Случай использования:

Чтение в электронной таблице 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 к другому без фактического попадания на страницу в первую очередь (если я не понимаю, как работает "redirect:"... он сначала вызывает метод контроллера правильно?)

Когда я перерываю точку в методе bulkReview, errorRows становится пустым... Так как же сохранить это значение между двумя методами?

Спасибо за помощь! Дайте мне знать, если мне нужно что-то уточнить!:)

Kris

1 ответ

Решение

Я не думаю, что механизм перенаправления работает так, как вы думаете. Первый контроллер отправляет URL-адрес браузеру пользователя, который затем следует браузеру. И по умолчанию Spring помещает любые данные в модель во время перенаправления в URL-адрес перенаправления, чтобы перенаправляемая страница могла "видеть" данные модели. Тем не менее, это не работает, когда у вас есть сложные данные в модели.

Итак, вам нужно подумать о том, как данные будут передаваться в URL-адресе перенаправления, который браузер отправляет обратно пользователю. Как список сериализуется в URL? наверное не очень хорошо.

Другой вариант - поместить данные в сеанс с одного контроллера и получить доступ к нему во втором.

Другие вопросы по тегам