ManagedBean доступ к другому ManagedBean - PullRequest
0 голосов
/ 13 февраля 2012

Я, наверное, очень близок к решению, но я новичок в JSF и не вижу своей ошибки. У меня есть первый управляемый компонент SessionScoped, представляющий бизнес-информацию (адрес, веб-сайт, ...)

@Named(value = "businessController")
@SessionScoped
public class BusinessController implements Serializable {
    private Business current;
    @EJB private BusinessFacade ejbFacade;
    ....

У меня есть второй управляемый компонент SessionScoped, представляющий вошедшего в систему пользователя

@Named(value = "loginController")
@SessionScoped
public class LoginController implements Serializable {

    private Login current;
    @EJB
    private LoginFacade ejbFacade;
    @ManagedProperty(value="#{businessController}")
    private BusinessController businessController;

    public BusinessController getBusinessController() {
        return businessController;
    }

    public void setBusinessController(BusinessController businessController) {
        this.businessController = businessController;
    }

Когда пользователь входит в систему, я устанавливаю текущий атрибут из loginController В зависимости от текущего пользователя, я хочу установить бизнес-атрибут из businessController:

businessController.setCurrent(current.getBusiness());

Моя проблема в том, что атрибут businessController имеет значение null!

Я использую NetBeans 7.0.1 и GlassFish 3.1 В режиме отладки я вижу переменную viewId со значением

>No current context (stack frame)<

К сожалению, мне это не звонит.

Любая помощь будет оценена Спасибо

1 Ответ

3 голосов
/ 13 февраля 2012

Вы смешиваете управляемые компоненты JSF с управляемыми компонентами CDI.

Ваш BusinessController помечен аннотацией CDI @Named, но введен аннотацией @ManagedProperty (от JSF). Управляемые компоненты CDI должны вводиться с @Inject. В этом случае не требуется геттер или сеттер. Если вы склонны использовать CDI, убедитесь, что вы импортируете правильные @SessionScoped:

CDI: javax.enterprise.context.SessionScoped

JSF: javax.faces.bean.SessionScoped

Попробуйте сделать следующее (Убедившись, что импортирован правильный класс области действия):

 @Inject private BusinessController businessController;
...