Боб весенней сессии - PullRequest
1 голос
/ 11 марта 2011
<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>

вот так я устанавливаю содержимое у текущего пользователя (думая, что оно будет сохранено в сеансе)

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

Я получаю содержимое сессионного компонента следующим образом -

User user = userFacade.getCurrentUser();

Проблема в том, что я получаю пользователя как ноль

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Это не так, как это работает. Если вы хотите сохранить что-то как в сеансе (это больше похоже на сессионный компонент в 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);
   }
}

Добавлена ​​

Джерри спросил: у меня вопрос, как его лучше спроектировать? Мне нужен способ для извлечения текущего объекта пользователя - поэтому я создаю bean-компонент с именем SessionObjectBean в области видимости сеанса, и у меня будет getter и setter для currentUser. 1. Это будет хороший дизайн? 2. Кроме того, должен ли currentUser также находиться в области видимости сеанса? 3. Могу ли я хранить другие объекты, такие как Order, в SessionObjectBean?

  • 1) Я думаю, что это разумный дизайн.
  • 2) CurrentUser вообще не должен быть каким-либо Spring Manged Bean.
  • 3) Вы можете «хранить» каждый нормальный! объект в bean-объекте области Spring Session.
0 голосов
/ 11 марта 2011

Это не так, как работают сессионные компоненты. Сессионный компонент не является компонентом, хранимым в сеансе, это (фактически) компонент, состояние которого сохраняется в сеансе.

Другими словами, если у вас есть компонент userFacade со свойством currentUser, и вы хотите, чтобы значение этого свойства было сохранено в сеансе, вы должны сделать userFacade компонентом в области сеанса. Затем его свойство currentUser (а также другие свойства, составляющие его состояние) будут сохранены в сеансе.

И, насколько я понимаю, ваш случай, User вообще не должен быть объявлен как бин Spring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...