[英]Unable to create managed bean, Property for managed bean aircraftMB does not exist
我找到了很多有關此問題的解決方案,但沒人能解決我的問題。 這是我的托管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.
有人可以幫忙嗎?
似乎您打算注入一個EJB而不是其他托管bean,如果是這樣,則按如下所示注入它:
@EJB
private DBDataManipulatorService dbDataManipulatorService;
確保您具有以下內容:在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;
....
}
根據異常,EL無法找到dbDataManipulatorService
。 那是因為您沒有為該屬性提供適當的獲取器和設置器。
嘗試更改這些方法的名稱
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不會注入到JSF管理的bean中
問題已經解決了。 在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();
}
現在,我有了所需的詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.