@SessionAttributes не работает должным образом для последовательных запросов get - PullRequest
0 голосов
/ 21 мая 2018

Прежде чем задать вопрос, сначала я опишу сценарий.У меня есть несколько контекстов сервлетов.предположим, что /**book**/review url соответствует book-servlet.xml, а /**report**/update соответствует report-servlet.xml.

Вот два контроллера

@Controller
@SessionAttributes(BookController.COMMAND_NAME)
public class BookController {

    public static final String COMMAND_NAME = "login";

    @GetMapping("/book/review")
    public String show(ModelMap modelMap) {

        modelMap.put(COMMAND_NAME, getBook());

        return "redirects:" + "/report/update"; //it redirects to second controller method
    }
}

@Controller
@SessionAttributes(ReportController.COMMAND_NAME)
public class ReportController {

    public static final String COMMAND_NAME = "report";

    @GetMapping("/report/update")
    public String show(ModelMap modelMap) {

        modelMap.put(COMMAND_NAME, getReport());

        return "redirects:" + "/report/done";
    }
}

Обратите внимание на эти два контроллера.Когда я помещаю getBook() в модель, он сохраняет этот объект в сеансе после исключения метода, поскольку @SessionAttributes(BookController.COMMAND_NAME) добавлено выше определения класса.Но после перенаправления на /report/update (другой контекст сервлета) мы также пытаемся поместить getReport() в модель.И после того, как пружина освобождения метода обработчика должна поместить объект в сеанс, как это происходит в первом случае. К сожалению, для второго контроллера он не сохраняет его в сеансе.

Мой вопрос заключается в том, может ли первый метод контроллера успешно сохранить егов сессию, почему второй контроллер не может?Или это для переключения контекста сервлета / нескольких запросов на получение или что-то вроде этого.Пожалуйста, мне нужно знать причину, по которой он ведет себя странно.Теперь я полностью сбит с толку насчет @SessionAttributes.Он должен работать одинаково для обоих контроллеров.

1 Ответ

0 голосов
/ 30 мая 2018

После изучения этого я обнаружил, что целесообразно использовать RedirectAttributes для этого типа сценария перенаправления.Причина ModelMap предназначен для сценария, в котором вы используете эти атрибуты ModelMap для визуализации представления.И FlashAttribute выживет после немедленного перенаправления на другой метод-обработчик и затем будет удален.Итак, я сделал свое решение, используя поддержку RedirectAttrinute от Spring.

...