Прежде чем задать вопрос, сначала я описываю сценарий. У меня есть несколько контекстов сервлета. предположим, что /**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. Он должен работать одинаково для обоих контроллеров.