2013-03-27 5 views
1

Я запускаю приложение GWT на Jetty 6.1 с Weld 2.0. Есть следующий код:Сжатый ввод HttpSession в сеанс, связанный с bean, равен нулю

@SessionScoped 
    public class SessionContext implements Serializable { 

     @Inject 
     private HttpSession httpSession; 

     public SessionContext() { 
      super(); 
      //at this point httpSession is null 
     } 
    } 

Что я упускаю, почему HttpSession не вводили? Ссылка говорит, что Injecting the HttpSession will force the session to be created.

ответ

1

Изменить определение

public SessionContext() { 
     super(); 
     //at this point httpSession is null 
} 

в

public SessionContext(HttpSession httpSession) { 
     super(); 
     this.httpSession = httpSession; 
     //check session here 
} 

Также используют внедрение конструктора

В противном случае обеспечить метод установки для httpSession

+0

Спасибо, что помогли. Но я должен упомянуть, что в любом случае ДОЛЖЕН быть конструктором по умолчанию без параметров. – Minolan

+2

Имейте по умолчанию ctor и используйте метод @ @ PostConstruct. – LightGuard

0

Это лучше использовать @PostConstruct аннотировать некоторый другой метод, here у вас есть:

Initializing управляемый компонент определяет метод обратного вызова жизненного цикла , что структура CDI должна вызывать после инъекции зависимостей, но до класса введен в эксплуатацию.

Это именно то место, где сделаны ваши инъекции, но код не был вызван.

так:

@PostConstruct 
public void doMyStuff() { 
    //feel free to access your injections here they are not null! 
}