2016-11-01 97 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),所以公共方法將被攔截,而公共變量則不會(因爲它們不能)。所以,請記住讓可變成員總是**私人**。 –