Jsf @ManagedProperty未被注入

Jsf @ManagedProperty未被注入,jsf,managed-bean,Jsf,Managed Bean,@ManagedProperty(“#{sessionBean}”)未正确注入。sessionBean是在JAR文件中声明的,它还有一个与JSF2.0兼容的faces配置。 但是当我使用 FacesContext context = FacesContext.getCurrentInstance(); sessionBean = (SessionBean) context.getApplication().evaluateExpressionGet(context, "#{sessionBean

@ManagedProperty(“#{sessionBean}”)
未正确注入。
sessionBean
是在JAR文件中声明的,它还有一个与JSF2.0兼容的faces配置。 但是当我使用

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配置。)您将
会话bean注入到哪里?向我们展示类定义。是a类
@ManagedBean

2.)检查setter
setSessionBean(SessionBean sb)
是否被调用

3.)设置器中提供的值是否为空

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

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

。。。并检查sessionBean的计算是否正确。

对于我来说,这是软件包的问题,以下导入对我有效:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
在我使用不同包的组合(由IDE自动导入)之前:


您知道JSF使用setter依赖项注入来解析托管属性吗?您是否有
setSessionBean(sessionBeanSB)
方法?如果没有-这是一个解决方案。如果是-为我们提供更广泛的背景。在任何情况下,您都必须以开发人员友好的方式描述“未注入”。是的,setter已经就位。我不知道除了问题本身所解释的情况外,更广泛的背景是什么。不管怎样,我编辑了这个问题,使之更加广泛。我遇到了这个问题中描述的问题。我已将日志记录放在SessionBean setter中。根本没有人叫它。我遵循以下说明:。我在Tomcat 7.0.50中使用Mojarra 2.2.5。我很乐意根据要求提供额外的细节。我使用的是javax.faces.bean.*注释,而不是javax.annotation.*。事实上,
javax.faces.view.ViewScoped
不适用于检索
@ManagedProperty(“{param.id}”)
您必须使用
javax.faces.bean.ViewScoped
。你搞定了!
import javax.faces.bean.ManagedProperty;
import javax.faces.view.ViewScoped;
import javax.inject.Named;