2012-02-13 3 views
0

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

@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 равен нулю!

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

>No current context (stack frame)< 

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

Любая помощь будет оценена Благодарности

ответ

3

Вы смешиваете 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; 
+0

Спасибо Мэтт, он отлично работает И я чему-то научился – Hugues

Смежные вопросы