Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Редирект в Spring MVC

#spring_mvc #spring #java #redirect


В последнее время мне никто не отвечает, но я всё равно почему-то спрашиваю... 

Привет, товарищи. По прежнему мусолю официальный пример на оф. сайте Spring, переписываю
их код с помощью аннотаций. Там есть формочка, чтобы увеличить цену, вот такая:



По нажатии кнопки Execute цены на товар увеличиваются на заданный процент, и после
этого пользователя перебрасывает на страницу со списком товаров.
Вот их код, который это обслуживает:

public ModelAndView onSubmit(Object command)
            throws ServletException {

        int increase = ((PriceIncrease) command).getPercentage();
        logger.info("Increasing prices by " + increase + "%.");

        productManager.increasePrice(increase);

        logger.info("returning from PriceIncreaseForm view to " + getSuccessView());

        return new ModelAndView(new RedirectView(getSuccessView()));
    }


Опустим работу с логированием, базой данных, остановимся только на возвращаемом методом
значении. Моя задача - сделать так, чтобы после увеличения цен на странице с товарами
появилось уведомление, мол, "цены успешно повышены", а при обновлении страницы пропало.
Я пробовал так:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView post(Model model) {
    model.addAttribute("hello", "world");
    return new ModelAndView(new RedirectView("/home.htm"));
}


так:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView post(Model model) {
    return new ModelAndView("redirect:/home.htm").addObject("hello", "world");
}


так:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView post(Model model) {
    return new ModelAndView("redirect:/home.htm", "hello", "world");
}


так:

@RequestMapping(method = RequestMethod.POST)
public View post(Model model) {
    model.addAttribute("hello","world");
    return new RedirectView("/home.htm");
}


А ещё тут предлагают вызывать метод, отвечающий за страницу со списком товаров. Все
мои попытки, представленные выше, передают мой hello=world в url, получается 


  http://localhost/home.htm?hello=world


Соответственно если я сделаю пометку таким образом, она никуда не денется после обновления
страницы. Как мне быть? Может, есть какой-то способ передать в модель той страницы
дополнительные атрибуты? На PHP я это делал с помощью $_SESSION, может, и здесь сессии
использовать?

P. S. Спасибо тем, кто доскроллил вопрос до конца, надеюсь получить ответ, палец
вверх и принятый ответ гарантирую.
    


Ответы

Ответ 1



может и здесь сессии использовать? Ну а как еще? Это же по факту состояние, которое надо сбрасывать после первого показа. Ну куки еще разве что. Вордпресс, конечно, живет себе гет-параметрами, но он вордпресс. Вообще эта штука называется flash messages, единственная проблема будет со списками, когда надо по одному ключу забить кучу сообщений https://stackoverflow.com/questions/11881720/multiple-flash-messages-in-spring-mvc В последнее время мне никто не отвечает, но я всё равно почему-то спрашиваю... палец вверх и принятый ответ гарантирую. -_-

Комментариев нет:

Отправить комментарий