Инъекция CDI в сервлет не работает

1

У меня есть контроллер с продюсером.

@Named
@SessionScoped
public class UserController{

    private User user;

    //other methods

    @Produces
    @User
    public User produceUser() {
        return user;
    }
}

Если я ввожу пользователя в сервлет, я получаю всегда одного и того же пользователя (я сравнивал идентификаторы объектов) - также в разных сеансах. Если я вставляю пользователя в CDI Bean, он работает, и я получаю пользователя текущего сеанса.

  • 0
    Не очень знаком с CDI, но сервлеты сохраняются в течение многих различных сессий; Вам нужно будет либо ввести прокси-сервер, который выбирает текущего пользователя, либо внедрить UserService.
  • 0
    Пожалуйста, предоставьте больше информации. В каком контейнере вы работаете? Какая версия CDI и т.д?
Показать ещё 1 комментарий
Теги:
servlets
cdi
producer
session-scope

1 ответ

1

UserController - это область сеансов, но производитель - нет. Т.е. у продюсера есть @Dependent scope, поэтому User компонент вводится один раз, когда сервлет инициализируется.

Попробуйте добавить @SessionScoped к вашему методу производителя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню