【问题标题】:SessionScoped Managed bean injection is not working [duplicate]SessionScoped 托管 bean 注入不起作用[重复]
【发布时间】:2015-05-11 06:02:10
【问题描述】:

这是我的 SessionScoped 托管 bean:

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named("clientSessionBean")
@SessionScoped
public class ClientSessionManagedBean implements Serializable {
...
}

这是我的 requestscoped 托管 bean

import javax.enterprise.context.RequestScoped; 
import javax.inject.Inject;
import javax.inject.Named;   

@Named("myBean")
@RequestScoped
public class MyManagedBean {

 @Inject
 private ClientSessionManagedBean clientSessionBean;
 ..
 }

clientSessionBean给我null

如何在 requestscoped 托管 bean 中注入 sessionScoped bean?

包裹有问题吗?

【问题讨论】:

  • 向我们展示你是如何使用MyManagedBean bean 对象的?
  • 在jsf中使用jstl标签
  • MyManagedBean 是控制器?还是从控制器中使用?
  • 不,我只在我的 jsf 文件中使用,它没有在任何控制器中使用
  • 您能否在会话范围的 bean 中添加 post 构造和 pre-destroy 方法,并尝试检查何时调用 pre-destroy 方法。

标签: jsf dependency-injection cdi jsf-2.2 managed-bean


【解决方案1】:

注入的资源仅在构造函数运行后可用,即在@PostConstruct 及以后。来自 JSR-250 的规范文档:

PostConstruct 注释用于需要在 依赖注入完成以执行任何初始化之后执行的方法

正如您应该能够从上面的摘录中推断出的,bean 生命周期中的事件顺序是:

  1. 初始化即调用构造函数(实际机制更复杂,但归根结底)

  2. 执行注射

  3. 调用生命周期回调,即@PostConstruct。正是在这一点上,您可以使用 #2 中创建的任何内容

相关

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 2012-04-09
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多