Spring MVC (Spring 2.5) Вопрос о Post-Redirect-Get - PullRequest
3 голосов
/ 16 июля 2010

У меня есть Spring Annonted Controller, который используется для сбора информации из формы и получения списка результатов поиска из базы данных.

Вот определение метода

@RequestMapping(method = RequestMethod.POST, params = {SUBMIT_BTN }) 
public ModelAndView processForm(@ModelAttribute(COMMAND_NAME){


   // 1. Load search results using search parameters from form (Contained in a collection of some sort)


   // 2. Create the ModelAndView 

   // 3. Redirect with RequestView or redirect: to generate a GET. 
}

Я думаю, что мне нужно перенаправить с перенаправлением: так как у меня есть список элементов в коллекции коллекции в сеансе. Невозможно добавить это как параметр запроса URL.

В основном я пытаюсь предотвратить проблемы с помощью кнопки "Назад", где говорится, что срок действия страницы истек. Я хочу реализовать шаблон PRG в строках.

Мне трудно обернуть голову, превращая POST в GET. Могу ли я просто перенаправить или мне нужно два метода? Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

6 голосов
/ 16 июля 2010

Стандартный шаблон должен иметь метод контроллера для обработки GET, который показывает форму (или любую другую) пользователю, и один для обработки POST, который является отправкой формы.Метод POST отправляет перенаправление после завершения обработки представления, которое возвращается к методу GET.

@RequestMapping(value="/myapp", method=GET) 
public String showForm(@ModelAttribute(COMMAND_NAME){
   return "form.jsp";
}

@RequestMapping(value="/myapp", method=POST) 
public String processForm(@ModelAttribute(COMMAND_NAME){
   // do stuff to process for submission
   return "redirect:/myapp";
}

Возвращение имени представления с префиксом «redirect:» заставляет Spring отправлять прямое HTTPа не внутренний запрос вперед.

Это тот же шаблон, который реализован в Spring 2.0 с SimpleFormController, но новый способ гораздо более прозрачен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...