gpt4 book ai didi

jsf - 使用 JSF 2.3 时,是否可以将 bean 注入(inject) phaselistener,tomcat 与 weld cdi 实现?

转载 作者:行者123 更新时间:2023-12-04 15:42:58 25 4
gpt4 key购买 nike

我想将一个 @SessionScoped 和一个 @RequestScoped bean 注入(inject)到我的 PhaseListener 实现中,但是我得到了 NullPointerException.

我使用带有 weld 实现的 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 注入(inject)到 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 注入(inject)的 bean 在 afterPhase 方法中为 null。

最佳答案

  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

关于jsf - 使用 JSF 2.3 时,是否可以将 bean 注入(inject) phaselistener,tomcat 与 weld cdi 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54461532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com