Я новичок в Spring MVC и пытаюсь заставить работать шаблон Post / Redirect / Get.Мы пытаемся провести опрос, где на каждой странице может отображаться различное количество вопросов.Я хотел бы реализовать это с помощью обработчика GET, который подготавливает следующую страницу опроса и затем передает ее представлению.В том же контроллере есть обработчик Post, который обрабатывает ответы формы на вопросы опроса, передает их службе опроса, которая возвращает следующую страницу вопросов, а затем перенаправляет следующую страницу surveyPage в обработчик getNextPage GET.
Большая часть этого работает, за исключением проблемы, заключающейся в том, что я не знаю, как передать этот объект «страница следующего опроса» из обработчика POST в обработчик getNextPage GET в перенаправлении.Редирект работает;он переходит от метода POST к методу GET, но surveyPage ModelAttribute - это новый объект в методе GET, а не тот, который был установлен в конце метода POST.Как видите, я пытался использовать ModelAttribute, но он не работает.Я также попытался использовать @SessionAttributes над классом, но затем получил HttpSessionRequiredException.
Мы не знали, как обрабатывать динамическую форму, содержащую переменную # вопросов, с Spring MVC Forms, поэтому мы просто выполнили прямую JSTL,Это прикольно, но это работает.Именно эта забавность привела к использованию @RequestBody и SurveyPageBean, возвращающихся с Post.Честно говоря, я не знаю, как заполнен SurveyPageBean.Это похоже на магию Spring MVC, но оно работает, поэтому я пока оставляю его в покое (другой разработчик сделал это, а потом я поднял его, и мы оба новички в Spring MVC).Пожалуйста, не отвлекайтесь на необычную обработку форм, если только это не является частью проблемы с пустым перенаправлением ModelAttribute surveyPage.
Вот фрагмент кода контроллера:
@Controller
@RequestMapping("/surveyPage")
public class SurveyPageController{
@RequestMapping(method=RequestMethod.GET)
public String getNextPage(@ModelAttribute("surveyPage") SurveyPage surveyPage, Model model) {
if(surveyPage.getPageId() == null) {
// call to surveyService (defined elsewhere) to start Survey and get first page
surveyPage = surveyService.startSurvey("New Survey");
}
model.addAttribute("surveyPage", surveyPage);
return "surveyPage";
}
@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@RequestBody String body, SurveyPageBean submitQuestionBean, Model model, @ModelAttribute("surveyPage") SurveyPage surveyPage) {
// process form results, package them up and send to service, which
// returns the next page, if any
surveyPage = surveyService.submitPage(SurveyPageWithAnswers);
if (results.getPageId() == null) {
// The survey is done
surveyPage = surveyService.quitSurvey(surveyId);
return "redirect:done";
}
model.addAttribute("surveyPage ", surveyPage );
return "redirect:surveyPage";
}