2011-03-11 83 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