@SessionAttributes не работает должным образом для последовательных запросов на получение

Прежде чем задать вопрос, сначала я описываю сценарий. У меня есть несколько контекстов сервлета. предположим, что /**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() в модель. И после выполнения метода обработчика spring должен поместить объект в сеанс, как это делается в первом случае. К сожалению, для второго контроллера он не сохраняет его в сеансе.

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


person Subrata nath    schedule 21.05.2018    source источник


Ответы (1)


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

person Subrata nath    schedule 30.05.2018