当前位置: 首页 > 知识库问答 >
问题:

在使用JSF2.3,tomcat和weld cdi实现时,是否可以向phaselistener注入bean?

司寇阳朔
2023-03-14

我想将@sessionscoped@requestscopedbean注入到我的PhaseListener实现中,但是我得到了NullPointerException

我使用tomcat和weld实现来实现CDI。我开始将JSF2.2迁移到2.3,因此从FacesContext改为CDI。我将@managedbean替换为@named以及迁移过程中必须做的其他事情,如:-向每个模块添加beansxml-向上下文添加BeanManager-从faces删除bean声明-config.XML-将SPIBeanManager作为resource-env-ref添加到web.XML如何向phaseListener实现注入bean?

@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方法中为空。

共有1个答案

耿星雨
2023-03-14
  1. 我将CDI配置文件beans.xml放入文件夹META-INF而不是WEB-INF
  2. beans.xml中,我必须将bean-discovery-mode从“annotated”更改为“all”。
  3. 我忘记添加带有@facesconfig(version=version.jsf_2_3)注释的类(为CDI bean启用EL解析)。
  4. 还忘记将faces-config.xml版本更改为2.3
 类似资料:
  • 问题内容: 我的配置是:Wildfly 8.2.0,焊接 是否可以在bean中而不是在CDI中的接口中注入bean? 问题答案: 是的,可以,但是当EJB注入业务视图时,您要公开的唯一业务视图是该视图,该视图是实现接口(在您的情况下是本地业务接口)时的默认视图。因此,如果要注入bean本身,则需要告诉容器您正在使用无接口视图。 在您的示例中,如果仍然要实现接口并进行注入,则应使用注释,这意味着Be

  • 我的配置是:Wildfly8.2.0,Weld 是否可以在CDI中注入bean而不是在其接口中注入?

  • 问题内容: 我在Android应用程序中将Dagger2用于DI。我发现我必须为使用@Inject字段的每个类编写注入方法。有没有一种方法可以只注入父类,而不必在每个子类上调用inject?以活动为例。我有一个“ 每个活动都从中延伸”的内容。有没有一种方法,我可以在BaseActivity的组件中创建一个注入方法,然后在BaseActivity的onCreate中调用inject,子活动中的@in

  • 从这个问题,有可能注入map与枚举? 例如,我有枚举: 我有一些与实现的接口: 但这样的注入不起作用: 我想自动注入。如何修复它,在spring框架端生成这样的代码?

  • 问题内容: 我有一个需要一些模块。有没有办法可以注入模块本身?我意识到这有点麻烦。 例: 我想在这种情况下,解决方案是将方法转换为完整的类。这显然是一个简化的示例;我正在处理的代码有很多这样的方法,因此将它们分成单独的类并引入配置它们的模块会增加相当多的混乱- 我认为Guice就是要减少样板混乱? 也许这反映了我对Guice的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么… 问

  • 问题内容: 是否可以在tomcat的URL中关闭jsessionid?jsessionid似乎对搜索引擎不太友好。 问题答案: 你可以使用此过滤器仅对搜索引擎禁用,但我建议对所有响应都使用它,因为它比不友好的搜索引擎更糟糕。它公开了可用于某些安全漏洞的会话ID(更多信息)。 Tomcat 6(6.0.30之前的版本) 你可以使用tuckey重写过滤器。 Tuckey过滤器的示例配置: Tomcat