3

@ManagedProperty("#{sessionBean}")未正确注入。是在 JAR 文件中声明的sessionBean,并且它还具有与 JSF 2.0 兼容的 faces-config。但是当我使用

FacesContext context = FacesContext.getCurrentInstance();
sessionBean = (SessionBean) context.getApplication().evaluateExpressionGet(context, "#{sessionBean}", SessionBean.class);

它正确地评估会话 bean。是什么原因?

编辑:我想要注入的 bean(sessionBean)在一个 JAR 文件中,该文件被注释为 @ManagedBean 和 @SessionScoped。JAR 还在 META-INF/resources 中包含一个 JSF2 兼容的 faces-config

4

2 回答 2

1

对我来说,这是包的问题,​​以下导入对我有用:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

在我使用不同包的组合之前(由 IDE 自动导入):

import javax.faces.bean.ManagedProperty;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
于 2014-11-15T18:45:30.130 回答
1

1.)你在哪里注入sessionBean?向我们展示类定义。班级是 a@ManagedBean吗?

2.) 检查二传手是否setSessionBean(SessionBean sb)调用。

3.) setter 中是否提供了值null

4.) 您还可以尝试执行以下操作:

@PostConstruct
private void init() {
  FacesContext context = FacesContext.getCurrentInstance();
  sessionBean = (SessionBean) context.getApplication().evaluateExpressionGet(context, "#{sessionBean}", SessionBean.class);
}

...并检查 sessionBean 是否被正确评估。

于 2013-10-18T10:53:04.643 回答