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