[SPRING] 스프링 MVC : @SessionAttributes는 컨트롤러간에 공유됩니까?
SPRING스프링 MVC : @SessionAttributes는 컨트롤러간에 공유됩니까?
검색 및 결과 목록에 대한 추상 컨트롤러 지원 클래스가 있습니다.
@Controller
@SessionAttributes("query")
public abstract class SearchController<Q extends SearchQuery> {
@RequestMapping
public String performSearch(@ModelAttribute("query") Q query) {
....
}
@ModelAttribute("query")
public abstract Q createDefaultSearchQuery();
}
여러 실제 검색 컨트롤러가이 기본 클래스를 확장합니다.
컨트롤러 중 하나에 액세스 한 후 (BookSearchQuery를 사용하는 /searchBooks.html이 SearchQuery를 구현한다고 말함) 쿼리가 세션에 올바르게 저장되고 후속 요청에 사용할 수 있습니다.
그러나 다른 컨트롤러 (예 : /searchAuthors.html에서 SearchQuery를 구현하는 /searchAuthors.html)에 액세스하면 마지막 요청 (BookSearchQuery)의 쿼리가 나중에 ClassCastException을 발생시키는 새 컨트롤러에 계속 사용되고 있습니다.
@SessionAttribute 주석을 지원 클래스에서 구현 클래스로 옮겨 보려고했지만 아무 소용이 없습니다.
내가 잘못하고있는 것이나 디자인에 의한 것입니까? 내가 무엇을 할 수 있을지?
고마워요!
해결법
-
==============================
1.@SessionAttributes를 사용하면이 객체는 같은 이름으로 HttpSession에 저장되며 다른 컨트롤러에서 액세스 (공유)됩니다. 그래서 스프링이 올바르게 작동합니다.
@SessionAttributes를 사용하면이 객체는 같은 이름으로 HttpSession에 저장되며 다른 컨트롤러에서 액세스 (공유)됩니다. 그래서 스프링이 올바르게 작동합니다.
모든 시나리오 ( "BookQuery", "AutorQuery", ...)에서이 속성의 이름을 바꾸는 것이 가장 좋은 방법이라고 생각합니다. 매우 우아하지 않습니다. (
-
==============================
2.나는 Spring 3.0.2에서 이것을 시도했지만 세션 속성은 컨트롤러간에 공유되지 않는다. 사실 나는 반대의 효과를 찾고 있었고 그것이 내가 발견 한 방법입니다.
나는 Spring 3.0.2에서 이것을 시도했지만 세션 속성은 컨트롤러간에 공유되지 않는다. 사실 나는 반대의 효과를 찾고 있었고 그것이 내가 발견 한 방법입니다.
from https://stackoverflow.com/questions/4016532/spring-mvc-sessionattributes-shared-among-controllers by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 데이터 Rest 기능으로 사용자 정의 Spring MVC HTTP 패치 요청 (0) | 2019.04.09 |
---|---|
[SPRING] Spring MVC BindingResult 나 bean name을위한 평범한 대상 객체가 아니다. (0) | 2019.04.09 |
[SPRING] 주석이 달린 컨트롤러의 동적 명령 클래스 (0) | 2019.04.09 |
[SPRING] 스프링 데이터 저장소와 mongodb로 스프링 애플리케이션 설정하기 (0) | 2019.04.09 |
[SPRING] Thymeleaf를 사용하여 Spring의 웹 기반 Scope에서 HTML 파일을 처리하고 처리 된 템플릿을 String으로 저장 (0) | 2019.04.09 |