【问题标题】:Unable to create managed bean, Property for managed bean aircraftMB does not exist无法创建托管 bean,托管 bean 的属性飞机MB 不存在
【发布时间】:2014-03-24 13:59:43
【问题描述】:

我找到了很多关于这个问题的解决方案,但没有人解决我的问题。 这是我的托管 bean:

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import com.bombardier.domain.Aircraft;
import com.bombardier.domain.WorkPackage;
import com.bombardier.services.DBDataManipulatorService;

@ManagedBean(name = "aircraftMB")
@RequestScoped
public class AircraftManagedBean implements Serializable{

private static final long serialVersionUID = 1L;

//Spring User Service is injected...
@ManagedProperty(value="#{DBDataManipulatorServiceImpl}")
DBDataManipulatorService dbDataManipulatorService;

List<Aircraft> aircrafts;

private int aircraftId;
private String type;
private String model;
private Map<String, WorkPackage> workPackagesMap;


public List<Aircraft> getAircrafts() {

    aircrafts = new ArrayList<Aircraft>();
    aircrafts = dbDataManipulatorService.findAllAircrafts();

    return aircrafts;
}

public DBDataManipulatorService getDBDataManipulatorServiceImpl() {

    return dbDataManipulatorService;
}


public void setDBDataManipulatorServiceImpl(DBDataManipulatorService dbDataManipulatorService) {

    this.dbDataManipulatorService = dbDataManipulatorService;

}


public void setAircrafts(List<Aircraft> aircrafts) {
    this.aircrafts = aircrafts;
}

public int getAircraftId() {
    return aircraftId;
}

public void setAircraftId(int aircraftId) {
    this.aircraftId = aircraftId;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getModel() {
    return model;
}

public void setModel(String model) {
    this.model = model;
}


public Map<String, WorkPackage> getWorkPackagesMap() {
    return workPackagesMap;
}


public void setWorkPackagesMap(Map<String, WorkPackage> workPackagesMap) {
    this.workPackagesMap = workPackagesMap;
}
}

我的服务如下:

@Service
@Transactional
public class DBDataManipulatorServiceImpl implements DBDataManipulatorService {

@Autowired
private AircraftRepository aircraftRepository;

@Autowired
private WorkPackageRepository workPackageRepository;

@Autowired
private MyJobRepository myJobRepository;

@Override
public Aircraft getAircraftById(String id) {

    return new Aircraft();
}

@Override
@Transactional
public Map<Integer, Aircraft> saveToDataBase(Map<Integer, Aircraft> aircraftsMap) {

    Map<Integer, Aircraft> newaircraftsMap = new HashMap<Integer, Aircraft>();
    Aircraft newAircraft = null;
    for (Aircraft aircraft : aircraftsMap.values()) {
        newAircraft = aircraftRepository.save(aircraft);
        newaircraftsMap.put(newAircraft.getAircraftId(), newAircraft);
    }

    return newaircraftsMap;
}

@Override
@Transactional
public MyJob findJobByJobId(String jobId) {

    MyJob job = myJobRepository.findOne(jobId);
    if (job == null) {

    }

    return job;
}

@Override
@Transactional
public WorkPackage findWorkPackageByAircraftIdAndWorkPackageId(
        int aircraftId, String workPackageId) {

    WorkPackage workPackage = workPackageRepository
            .findWorkPackageByWorkPackageIdAndAircraftId(aircraftId,
                    workPackageId);

    return workPackage;
}

@Override
@Transactional
public Aircraft findAircraftByaircraftId(int aircraftId) {

    return aircraftRepository.findOne(aircraftId);
}

@Override
@Transactional
public List<Aircraft> findAllAircrafts() {

    List<Aircraft> aircrafts;

    aircrafts = aircraftRepository.findAll();

    return aircrafts;

}
}

我收到以下错误:

Unable to create managed bean aircraftMB. The following problems were found: - Property dbDataManipulatorService for managed bean aircraftMB does not exist. Check that appropriate getter and/or setter methods exist.

有人可以帮忙吗?

【问题讨论】:

    标签: java spring jsf primefaces


    【解决方案1】:

    您似乎打算注入 EJB 而不是其他托管 bean,如果是,请按如下方式注入:

    @EJB
    private DBDataManipulatorService dbDataManipulatorService;
    

    【讨论】:

    • 旧的错误消息消失了,但我得到了:'java.lang.NullPointerException: null' br/ at com.web.AircraftManagedBean.getAircrafts(AircraftManagedBean.java:38)。你能告诉我有什么问题吗?
    • 这可能意味着dbDataManipulatorService 未正确注入托管bean。您是否尝试使用其他方法运行它?
    • 不,有什么建议吗?
    【解决方案2】:

    根据异常,EL 找不到dbDataManipulatorService。那是因为您没有为该属性提供正确的 getter 和 setter。

    尝试更改这些方法的名称

    public DBDataManipulatorService getDBDataManipulatorServiceImpl() {    
        return dbDataManipulatorService;
    }
    
    
    public void setDBDataManipulatorServiceImpl(DBDataManipulatorService dbDataManipulatorService) {    
        this.dbDataManipulatorService = dbDataManipulatorService;    
    }
    

    为了这些

    public DBDataManipulatorService getDbDataManipulatorService() {    
        return dbDataManipulatorService;
    }
    
    
    public void setDbDataManipulatorService(DBDataManipulatorService dbDataManipulatorService) {    
        this.dbDataManipulatorService = dbDataManipulatorService;    
    }
    

    至少这个特定的异常会消失

    Unable to create managed bean aircraftMB. The following problems were found: - Property dbDataManipulatorService for managed bean aircraftMB does not exist. Check that appropriate getter and/or setter methods exist.
    

    如果在那之后您仍然面临注入问题,这篇文章可能会很有用Spring DAO is not injected in JSF managed bean

    【讨论】:

    • 我喜欢你解释所描述问题的原因:)
    【解决方案3】:

    确保您具备以下条件: 在 faces-config.xml 中:

        <application>
             <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
             ...
        </application>
    

    确保您在 web.xml 中有这些侦听器:

        <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
        <listener>
          <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
        </listener>
    

    在你的 AircraftManagedBean 中:

        @Component
        public class AircraftManagedBean implements Serializable{
    
        @Autowired
        DBDataManipulatorService dbDataManipulatorService;
        ....
        }
    

    【讨论】:

    • 我返回到旧的错误消息:无法创建托管 bean 飞机MB。发现以下问题: - 托管 bean aircraftMB 的属性 dbDataManipulatorService 不存在。检查是否存在适当的 getter 和/或 setter 方法。
    • 您是否检查了我对 AircraftManagedBean 的 Component 注释和 DBDataManipulatorService 的 Autowired 的编辑响应? dbDataManipulatorService 应该在 spring 配置文件中。
    • 是的,一切都已完成,但钢铁有问题
    • 你能发布你的spring配置文件吗?
    【解决方案4】:

    问题解决了。在 userInterfaceBean 中添加:

    public UserInterfaceBean(){
        //Because the Autowire is not working
        WebApplicationContext ctx =  FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
        dbDataManipulatorService = ctx.getBean(DBDataManipulatorService.class);
    }
    
    @PostConstruct
    public void Init() {
    
        aircrafts = new ArrayList<Aircraft>();
        aircrafts = dbDataManipulatorService.findAllAircrafts();
    
    }
    

    现在我的视图中有我想要的细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2016-06-22
      • 1970-01-01
      相关资源
      最近更新 更多