Как передать сложный ModelAttribute с помощью перенаправления: в Spring MVC 3.0 - PullRequest
1 голос
/ 28 октября 2011

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

Вариант использования:

Чтение в электронной таблице 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:» ... он сначала вызывает метод контроллера правильно?) 1010 *

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

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

Kris

1 Ответ

2 голосов
/ 28 октября 2011

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

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

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

...