【问题标题】:ManagedBean accessing another ManagedBeanManagedBean 访问另一个 ManagedBean
【发布时间】:2012-03-04 12:55:54
【问题描述】:

我可能真的很接近解决方案,但我是 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 设置业务属性:

businessController.setCurrent(current.getBusiness());

我的问题是 businessController 属性为空!

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

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

不幸的是,它没有给我敲响警钟。

任何帮助将不胜感激 谢谢

【问题讨论】:

    标签: jsf managed-bean


    【解决方案1】:

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

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

    CDI:javax.enterprise.context.SessionScoped

    JSF:javax.faces.bean.SessionScoped

    尝试以下操作(确保导入了正确的范围类之后):

     @Inject private BusinessController businessController;
    

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 2012-12-22
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 2014-12-06
      相关资源
      最近更新 更多