2016-11-01 6 views
0

나는이 같은 세션 빈에 내 사용자 정보를 저장 :세션 빈은

@Controller 
public class FooController { 

    @Autowired 
    private UserInfos userInfos; 

    @RequestMapping(value="/foo/login") 
    public String login_foo(HttpServletRequest request){ 
     .... 
     userInfos.idUser = ... 
     userInfos.roles = ... 

     request.getSession().setAttribute("userInfos", userInfos); 
     .... 
    } 
} 

그러나 :

@Component 
@Scope(value="session" , proxyMode = ScopedProxyMode.TARGET_CLASS) 
public class UserInfos { 

    public List<Integer> roles; 
    public Integer idUser; 


    public List<Integer> getRoles() { 
     return roles; 
    } 
    public void setRoles(List<Integer> roles) { 
     this.roles = roles; 
    } 
    public Integer getIdUser() { 
     return idUser; 
    } 
    public void setIdUser(Integer idUser) { 
     this.idUser = idUser; 
    } 


} 

내 컨트롤러에서 나는 속성으로 세션에서 콩을 넣어 나는 ${ sessionScope.userInfos.idUser }의 값이 항상 nulljsp 페이지에서 사용하려고합니다.

나는이있어

(${ sessionScope.userInfos }) - (${ sessionScope.userInfos.idUser }) 

시도 :

([email protected]) -() 

그래서 어떻게 JSP 페이지에서 세션 빈의 속성을 사용할 수 있습니까?

내 컨트롤러에서 디버그 할 때 userInfos.idUser 값이 null 또는 비어 있지 않기 때문에.

답변

0

우리는 대체하여 그것을 해결 :

userInfos.idUser = ... 
    userInfos.roles = ... 

작성자 :

userInfos.setIdUser(...); 
    userInfos.setRoles(...); 

속성을 설정하여 해당 작업이 매우 유용 할 이유 누군가가 나를 설명 할 수 있습니다.

+1

내가 생각할 수있는 유일한 설명은 아마도 스프링이 동적 프록시 객체를 통해 빈을 프록시 처리한다는 것입니다. 그러나 Spring은 객체가 ** java beans ** (private 변수, public getter 및 setter)로 동작 할 것으로 항상 기대하므로 public 메소드는 가로 채고 있지만 공용 변수는 가로 채지 못하고 있습니다. 따라서 변수 멤버를 ** private **로 항상 기억하도록하십시오. –

관련 문제