Управляемое наследование бобов - PullRequest
3 голосов
/ 06 мая 2011

Я хотел бы создать суперкласс для нескольких управляемых 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.
}

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

1 Ответ

0 голосов
/ 21 июля 2011

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

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

...