Как передать сложный атрибут 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? наверное не очень хорошо.
Другой вариант - поместить данные в сеанс с одного контроллера и получить доступ к нему во втором.