2012-02-13 83 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