2016-11-01 63 views
0

我存储我的用户信息到会话bean是这样的:会话bean

@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; 
    } 


} 

在我的控制,我把这个bean在会话的属性:

@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); 
     .... 
    } 
} 

但是,当我试着用它在jsp页面${ sessionScope.userInfos.idUser }的值总是null

当我尝试

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

我得到这个:

([email protected]) -() 

所以,我怎么能使用一个会话bean的属性在JSP页面?

因为当我在我的控制器调试userInfos.idUser的值不为空或空。

回答

0

我们通过更换解决它:

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

通过:

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

如果有人能解释我为什么与设置属性的工作将是非常有用的。

+1

我能想到的唯一解释是Spring可能通过动态代理对象代理您的bean。但是,由于Spring始终期望对象的行为如同** java beans **(私有变量,公共getter和setter),所以公共方法将被拦截,而公共变量则不会(因为它们不能)。所以,请记住让可变成员总是**私人**。 –