我正在使用 JSF 并且在一段时间内遇到了问题,我在很多地方进行了搜索,但找不到任何合适的答案。
我可以让依赖注入在抽象类(或更一般地说是层次结构中更高的类)类中工作吗?另外,在使用继承时我们应该如何处理注释?我读过,通常的做法是不注释抽象类,只注释具体的类,但是,这意味着没有对该抽象类的注入?
我的问题是一个(检查最后一条评论):
抽象类
@ManagedBean
@ViewScoped
public abstract class AbstractController<T extends VersionedObject> implements Serializable {
@ManagedProperty("#{libraryVersionController}")
private LibraryVersionController libraryVersionController;
public List<T> loadFromDatasource(IVersionedServiceBase<T> service) {
log.info("Loading generic VO from data source");
VersionedObjectFilter filter = new VersionedObjectFilter();
filter.setSelectedLibVersion(libraryVersionController.getSelectedItem());
// etc
}
// getters, setters...
}
具体类
@ManagedBean
@ViewScoped
public class DomainController extends AbstractController<Domain> implements Serializable {
private List<Domain> allItems;
private Domain[] selectedItem;
@ManagedProperty(value = "#{domainService}")
private DomainService domainService;
@PostConstruct
public void loadFromDatasource() {
allItems = super.loadFromDatasource(domainService);
// !! DOES NOT WORK, null pointer exception on abstract class (libraryVersionController)
// etc
}
Getter 和 setter 设置正确,正如我在 .xhml 中看到的那样,它是我引用的具体类 (#{domainController.allItems}),只有一个 @PostConstruct。我正在使用 JSF2.1 和 Mojarra。
谢谢你的帮助 !