我想将@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
方法中为空。
答案 0 :(得分:0)