Наследование управляемого компонента

Я хочу создать суперкласс для нескольких управляемых bean-компонентов, содержащий, среди прочего, внедренный управляемый bean-компонент @SessionScoped и @EJB. Следующие работы

Супер класс:

@ManagedBean
@ViewScoped
public abstract class UserPageController implements Serializable {
    private static final long serialVersionUID = -6118448960678133445L;

    @ManagedProperty(value = "#{sessionController}")
    protected SessionController sessionController;

    private User user;
    private String userId;
    @EJB protected UserBean userBean;

    public UserPageController() {
    }

    public SessionController getSessionController() {
        return sessionController;
    }

    public void setSessionController(SessionController sessionController) {
        this.sessionController = sessionController;
    }

    //-------------------------------- User ------------------------------------
    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public User getUser() {
        if (user == null) {
            if (getUserId() != null && sessionController.getLoggedInUser().getRole().isManager()) {
                User dbUser = userBean.findUser(Long.parseLong(userId));
                if (dbUser != null) {
                    setUser(dbUser);
                }
            } else {
                setUser(userBean.findUser(sessionController.getLoggedInUser().getId()));
            }
        }
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

}

Использование:

@ManagedBean
@ViewScoped
public class UserCompetenceController extends UserPageController implements Serializable {
    // Stuff that uses sessionController & userBean.
}

Есть ли способ избежать аннотирования абстрактного суперкласса как управляемого компонента? Это как-то кажется неправильным, но без этого внедрение зависимостей не сработает.


person Rasmus Franke    schedule 06.05.2011    source источник


Ответы (1)


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

Вы пробовали ту же конструкцию с использованием CDI?

person Alexander Rühl    schedule 21.07.2011