PrimeFaces DataTable Sortierung & Filterung funktioniert nicht mit JSF DataModel
Habe ich 3 test-web-Anwendungen mit dem gleichen Modell und Controller, der Unterschied ist in der JSF-session-managed beans.
- Anwendungen Eine und C verwenden JSF DataModel Elemente abzurufen :
Eine JPA Query ResultSet gibt eine java-LISTE, die dann verpackt in einem ListDataModel. Der Wert dieser letzteren werden die Elemente angezeigt, die von PrimeFaces dataTable. - Die Anwendung B verwendet Java LISTE Elemente abzurufen:
Eine JPA Query ResultSet gibt eine java-Liste, die wird der Wert der Gegenstände angezeigt, die von PrimeFaces 2.2.1 dataTable.
Sortieren und filtern in der Anwendung B sind voll funktionsfähig und schnell, während in der Anwendung A und C, Sie sind tödlich, nicht.
Ich möchte nur erwähnen, dass die Filterung bei der Sortierung von anderen Bibliotheken wie Richfaces, OpenFaces, funktioniert out of the box mit diesem code.
Das problem bleibt auch in PrimeFaces 3.0.0. Ist das ein bug?
- In-App-B :
Code:
private List<Customer> items = null;
//remainder of code here
public List<Customer> getCustomerItems() {
if (customerItems == null) {
getPagingInfo();
customerItems = jpaController.findCustomerEntities(pagingInfo.getBatchSize(), pagingInfo.getFirstItem());
}
return customerItems;
}
In-App Ein:
Code:
private DataModel items = null;
public PaginationHelper getPagination() {
if (pagination == null) {
pagination = new PaginationHelper(999999) {
@Override
public int getItemsCount() {
return getJpaController().getChimioCount();
}
@Override //The list of Customers is wrapped in a JSF ListDataModel
public DataModel createPageDataModel() {
return new ListDataModel(getJpaController().findCustomerEntities(getPageSize(), getPageFirstItem()));
}
};
}
return pagination;
}
/**
* this goes for the value attribute in a datatable to list all the Customer items
*/
public DataModel getItems() {
if (items == null) {
items = getPagination().createPageDataModel();
}
return items;
}
In-App C:
Code:
private DataModel<Project> items;
//remainder of code here
/**
*The ListDataModel is initialized here
*/
public void init() {
try {
setProjectList(doInTransaction(new PersistenceAction<List<Project>>() {
public List<Project> execute(EntityManager em) {
Query query = em.createNamedQuery("project.getAll");
return (List<Project>) query.getResultList();
}
}));
} catch (ManagerException ex) {
Logger.getLogger(ProjectManager.class.getName()).log(Level.SEVERE, null, ex);
}
projectItems = new LinkedList<SelectItem>();
projectItems.add(new SelectItem(new Project(), "-- Select one project --"));
if (getProjectList() != null) {
projects = new ListDataModel<Project>(getProjectList());
for (Project p : getProjectList()) {
projectItems.add(new SelectItem(p, p.getName()));
}
}
}
Vielen Dank im Voraus für Eure Hilfe.
InformationsquelleAutor Hanynowsky | 2011-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte dies ein PrimeFaces bug. Ich habe gesehen, einige Diskussion über Probleme mit DataTable Sortieren, wenn ein Daten-Modell verwendet wird. Hier ist ein link zu einem der PrimeFaces-Fehler in Ihrer tracker.
Vielen Dank für das heads-up über die neuesten snapshot. Ich bin nicht mit ListDataModel noch, aber ich bin wahrscheinlich zu benötigen, es in der Zukunft.
InformationsquelleAutor Jim Tough