Spring перенаправление Контроллера MVC с помощью параметров URL вместо в ответ

Я пытаюсь реализовать УСПОКОИТЕЛЬНЫЕ URL в своем Spring приложение MVC. Все хорошо за исключением обработки представлений формы. Я должен перенаправить или назад к исходной форме или к странице "успеха".

@Controller
@RequestMapping("/form")
public class MyController {

    @RequestMapping(method = RequestMethod.GET)
    public String setupForm() {
        // do my stuff
        return "myform";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processForm(ModelMap model) {            
        // process form data

        model.addAttribute("notification", "Successfully did it!");
        return "redirect:/form";
    }
}

Однако когда я читал в документации Spring, если Вы перенаправите какие-либо параметры, то будет помещен в URL. И это не работает на меня. Каков был бы самый корректный путь вокруг этого?

39
задан Lu55 4 September 2015 в 18:34
поделиться

3 ответа

http://jira.springframework.org/browse/SPR-6464 предоставил мне то, что мне было нужно, чтобы заставить все работать, пока Spring MVC не предложит эту функциональность (потенциально в релизе 3.0.2). Пока я просто временно реализовал имеющиеся у них классы и добавил фильтр в контекст моего веб-приложения. Работает отлично!

7
ответ дан 27 November 2019 в 02:37
поделиться

Вместо этого можно заставить processForm() возвращать объект View, и пусть он возвращает конкретный тип RedirectView, который имеет параметр для setExposeModelAttributes().

Когда вы возвращаете имя представления с префиксом "redirect:", Spring MVC все равно преобразует его в объект RedirectView, только делает это с setExposeModelAttributes в true (что, на мой взгляд, является странным значением по умолчанию).

8
ответ дан 27 November 2019 в 02:37
поделиться

Если вы не хотите, чтобы в URL-адресе отображалось сообщение об успешном завершении, то один из вариантов - поместить его в сеанс (в методе processForm), а затем проверить для него (и удалите его) в методе setupForm.

Отредактировано для добавления: если это сложно сделать вручную, вы можете написать подкласс RedirectView, который добавляет атрибут «сообщение» и завершает процесс его вставки в сеанс. Не уверен, однако, есть ли простой способ обернуть получение сообщения обратно из сеанса ...

Честно говоря, я не думаю, что есть простой ответ - природа перенаправления HTTP такова, что состояние isn ' t перенесено; если вы все равно хотите поддерживать состояние, вы застряли с различными обычными способами поддержания состояния в веб-приложениях: сеанс, файл cookie, строка запроса ...

4
ответ дан 27 November 2019 в 02:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: