2012-02-13 75 views
0

我可能真的很接近解決方案,但我是JSF的新手,我沒有看到我的錯誤。 我已經第一SessionScoped託管Bean表示業務信息(地址,網站,...)ManagedBean訪問另一個ManagedBean

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

我都第二SessionScoped託管Bean表示登錄的用戶

@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管理的Bean。

您的BusinessController註釋了CDI註釋@Named,但注入了註解(來自JSF)@ManagedProperty。 CDI託管的豆需要注入@Inject。在這種情況下不需要吸氣劑或二硫化碳。如果你傾向於使用CDI,請確保您導入正確的@SessionScoped

CDI:javax.enterprise.context.SessionScoped

JSF:javax.faces.bean.SessionScoped

請嘗試以下操作(確保導入了正確的示波器級別後):

@Inject private BusinessController businessController; 
+0

謝謝Matt,它的工作原理非常好,而且我學到了一些東西 – Hugues 2012-02-14 03:03:57