ManagedBean访问另一个ManagedBean

时间:2012-02-13 03:20:58

标签: jsf managed-bean

我可能非常接近解决方案,但我是JSF的新手,我没有看到我的错误。 我有一个代表商业信息的第一个SessionScoped Managed Bean(地址,网站......)

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

我有第二个SessionScoped Managed 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设置business属性:

businessController.setCurrent(current.getBusiness());

我的问题是businessController属性为null!

我使用NetBeans 7.0.1和GlassFish 3.1 在调试模式下,我可以看到一个值为

的viewId变量
>No current context (stack frame)<

不幸的是,它没有响铃给我。

任何帮助将不胜感激 感谢

1 个答案:

答案 0 :(得分:3)

您正在将JSF托管bean与CDI托管bean混合使用。

您的BusinessController使用CDI注释@Named进行注释,但会注入@ManagedProperty注释(来自JSF)。 CDI托管bean需要注入@Inject。在这种情况下,不需要吸气剂或固定剂。如果您倾向于使用CDI,请确保导入正确的@SessionScoped

  

CDI:javax.enterprise.context.SessionScoped

     

JSF:javax.faces.bean.SessionScoped

尝试以下方法(确保导入正确的范围类后):

 @Inject private BusinessController businessController;