【问题标题】:Is it possible to inject a bean to phaselistener when using JSF 2.3, tomcat with weld cdi implementation?使用 JSF 2.3、tomcat 和焊接 cdi 实现时,是否可以将 bean 注入 Phaselistener?
【发布时间】:2019-06-24 23:17:01
【问题描述】:

我想将@SessionScoped@RequestScoped bean 注入到我的PhaseListener 实现中,但我得到了NullPointerException

我使用带有焊接实现的tomcat来实现CDI。我开始将JSF 2.2迁移到2.3,所以我从FacesContext改为CDI。 好吧,我将 @ManagedBean 替换为 @Named 以及迁移期间必须做的任何其他事情,例如: - 将 bean XML 添加到每个模块 - 将 BeanManager 添加到上下文 XML - 从 faces-config.xml 中删除 bean 声明 - 将 SPI BeanManager 作为 resource-env-ref 添加到 web.xml 如何将任何 bean 注入 PhaseListener 实现?

@Named
@SessionScoped
public class MyHandler implements Serializable {    
..}

@Named
@RequestScoped
public class MyController extends MyParentController<Example> {
..}

public class MyPhaseListener implements PhaseListener {

private MyHandler myHandler;
private MyController myController;

@Inject
public void setMyHandler(MyHandler myHandler) {
    this.myHandler= myHandler;
}

@Inject
public void setMyController (MyController myController) {
    this.myController= myController;
}
...

public void afterPhase(PhaseEvent event) {
myHandler.method()
}

myHandler 注入的 bean 在 afterPhase 方法中为空。

【问题讨论】:

  • 我认为这不是一个重复的问题。我询问了 JSF 2.3 中的注入,而不是 JSF 2.2 中的注入。我的目标是消除所有通过 EL 表达式从上下文中获取 bean 的代码。
  • 你试过现场注入吗?
  • stackoverflow.com/questions/19930241/… BalusC 建议它应该从 JSF 2.2 开始工作,但我也无法使用 fieldinjection 将 @Inject 某些东西放入 Phaselistener(使用 openWebbeans、Mojarra 2.3、CDI API 2.0) .撤销了我的重复标志并对解决方案感兴趣。因此投了赞成票。
  • @BravoNine 最好将您的答案放入回复中,并将其标记为已接受以帮助他人;)

标签: jsf cdi weld jsf-2.3 phaselistener


【解决方案1】:
  1. 我将 CDI 配置文件 beans.xml 放入文件夹 META-INF 而不是 WEB-INF
  2. beans.xml 中,我不得不将bean-discovery-mode 从“带注释”更改为“全部”。
  3. 我忘记添加带有@FacesConfig(version = Version.JSF_2_3) 注释的类(以启用 CDI bean 的 EL 解析)。
  4. 也忘了把faces-config.xml版本改成2.3

【讨论】:

    【解决方案2】:

    幸运的是我解决了这个问题......我必须做的几件事:

    1. 我将 beans.xml 放入 META-INF/,但 beans.xml 必须在 WEB-INF。
    2. 在 beans.xml 中,我必须将 bean-discovery-mode 从“annotated”更改为 “全部”。
    3. 我忘了用@FacesConfig(version = Version.JSF_2_3) 添加一个类 注释(为 CDI bean 启用 EL 解析)。
    4. 还忘记将 faces-config.xml 版本更改为 2.3。

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 2016-03-28
      • 2016-08-02
      • 2021-09-18
      • 2018-10-10
      • 2012-07-23
      • 2018-01-08
      • 2019-06-04
      相关资源
      最近更新 更多