2011-03-11 115 views
1
<bean id="user" class="com.test.service.beans.User" scope="session"> 
    <aop:scoped-proxy/> 
</bean> 

<bean id="userFacade" class="com.test.service.facade.UserFacadeImpl" init-method="init"> 
    <property name="currentUser" ref="user"/> 
</bean> 

這就是我如何在當前用戶設置的內容(認爲它會在會話店)春會話bean

user = userFacade.getUser(userNameorEmail); 
userFacade.setCurrentUser(user); 

我得到的會話bean的內容是這樣 -

User user = userFacade.getCurrentUser(); 

問題是我得到的用戶爲空

回答

2

這不是它的工作方式。如果你想成才存儲在一個會話(它更像一個會話Bean在JEE5/6),你必須將其存儲在領域com.test.service.beans.User。 (也許你應該將這個類重命名爲UserSession,以使其更清晰。)

短的例子,使之更加明確:

package com.test.service.beans; 
class User[Session] { 
    int userId; (getter + setter) 
    ... 
} 

package com.test.service.facade 
class UserFacadeImp { 
    //set by spring 
    private User[Session] user[Session]; + getter/setter 

    public saveUserIdInSession(int userId) { 
     this.user[Session].setUserId(userId); 
    } 
} 

新增

傑裏問:我的問題如何更好地設計它?我需要一種方法來檢索當前的用戶對象 - 所以我在會話範圍內創建一個名爲SessionObjectBean的bean,並且我將擁有currentUser的getter和setter。 1.這是一個好的設計嗎?另外,如果當前用戶也在會話範圍內? 3.我可以在SessionObjectBean中存儲Order等其他對象嗎?

  • 1)我認爲這是一個合理的設計。
  • 2)CurrentUser一定不能是任何Spring Manged Bean。
  • 3)你可以「存儲」每一個正常!對象在Spring Session範圍的bean中。
+0

我的問題是如何更好地設計它?我需要一種方法來檢索當前的用戶對象 - 所以我在會話範圍內創建一個名爲SessionObjectBean的bean,並且我將擁有currentUser的getter和setter。 1.這是一個好的設計嗎?另外,如果當前用戶也在會話範圍內? 3.我可以在SessionObjectBean中存儲Order等其他對象嗎? – 2011-03-11 18:55:59

+0

@Jerry:看到我的擴展答案 – Ralph 2011-03-12 10:17:27

0

這不是會話bean的工作方式。會話bean不是存儲在會話中的bean,而是(有效)其狀態存儲在會話中的bean。

換句話說,如果你有一顆豆userFacade與屬性currentUser,並希望該屬性的值存儲在會話中,你應該讓userFacade會話作用域的bean。然後它的currentUser屬性(以及組成其狀態的其他屬性)將被存儲在會話中。

而且,據我瞭解你的情況,User不應該被聲明爲Spring bean。

+0

然後我相信我的設計是錯誤的。我無法創建一個userFacade會話bean,這沒有任何意義。我如何設計更好?那麼,是否在會話狀態中有一個bean,我需要在會話中使用另一個包裝bean?我很困惑! – 2011-03-11 18:42:26

+0

@Jerry:是的,差不多就是這樣。您創建會話bean來保存與會話相關的狀態,並且'User'對象是該狀態(在這種情況下,不需要將其聲明爲bean)。 – axtavt 2011-03-11 19:07:55