【发布时间】:2015-10-08 19:35:06
【问题描述】:
我正在使用 JPA 2 EclipseLink 开发 JSF 应用程序。我需要使用列表的 ListDataModel 实现而不是普通的 List 实现。我想把这个方法放在一个抽象的外观类中,这样它就可以在整个应用程序中使用。对于普通的 List 实现,抽象类
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
抽象类的实现是:
@Stateless
public class ExportFacade extends AbstractFacade<Export> {
@PersistenceContext(unitName = "GazpromModulePU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public ExportFacade() {
super(Export.class);
}
上述方法的结果正确显示,一切正常。现在我想做完全相同的事情,但在 ListDataModel 中返回结果。我试过了:
public ListDataModel<T> findAllListDataModel() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return new ListDataModel<T>(getEntityManager().createQuery(cq).getResultList());
}
使用相同的实现(和上面的抽象方法),列表不显示,错误控制台为空白。我可以使用这样的方法手动硬编码 ListDataModel:
public ListDataModel<Export> hardCodedMethod() {
if(someList == null) {
someList = makeModel();
}
return someList;
}
public ListDataModel<Export> makeModel() {
List<Export> elist = myFacade.findAll();
ListDataModel<Export> model = new ListDataMOdel<Export>(eList);
return model;
}
我想在一个抽象类中实现上述代码,而不是在整个应用程序中对其进行硬编码。将不胜感激任何指导。提前致谢!
【问题讨论】:
标签: jsf jakarta-ee jpa jsf-2