2011-01-04 8 views
1

Ich habe eine Anwendung basierend auf JBoss Seam, RichFaces und Hibernate/JPA. Ich habe eine DAO-Klasse und einige Business-Layer-Klassen erstellt, die zum Abrufen von Daten anhand verschiedener Kriterien verwendet werden. (Letzten abrufen, alle durchsuchen, usw.) Ich möchte diese Ergebnisse zurückgeben und sie für den Benutzer anzeigen lassen, so dass der Benutzer durch sie paginieren kann. Da die zurückgegebenen Objekte jedoch ziemlich groß sein können (und es gibt eine große Anzahl von Objekten), würde ich lieber keine Objekte wie <rich:dataList /> und <rich:datascroller /> verwenden, die erfordern, dass ich alle Objekte in einer großen Abfrage abruft und sie im Speicher belasse .Server-seitige Paginierungsmuster für die Naht?

Gibt es allgemein akzeptierte Muster für die serverseitige Paginierung von Datensätzen? Ich bin auf der Suche nach einer Strategie für:

  • eine Teilmenge meiner Daten Abrufen eines Startindex verwendet und zähle
  • Blättern Sie durch den Datensatz ‚next‘ und ‚zurück‘ Tasten, wodurch eine neue Teilmenge Abrufen von die Daten einen aktualisierten Startindex verwendet und

Hat jemand von Ihnen benutzerdefinierte Datenmodell Objekte zählen gesehen, die mich <rich:dataList /> und <rich:datascroller /> zu verwenden, aber immer noch durchführen serverseitige Paginierung mit Teilmenge von Abfragen ermöglichen würde? Ich wäre sehr neugierig auf Ihre Methoden für den Umgang mit einem solchen Szenario.

Antwort

3

Im Seam Application Framework gibt es eine integrierte Seitennummerierung. Schauen Sie sich die Objekte EntityQuery an.

können Sie sich leicht jene Klassen, und im Grunde Paginierung kostenlos erhalten, wenn getResultList()

jedoch verwenden, bevor Sie diese Klassen erstrecken überall beginnen, werfen Sie einen Blick auf this blog post.

+0

Einverstanden. Aber ich habe bereits DAO-Klassen, um den Datenabruf zu bewältigen. Meine Frage ist, ob es gut etablierte oder allgemein akzeptierte Muster für die serverseitige Paginierung gibt, die keine EntityQuery beinhalten. – Shadowman

+0

Ja, und das ist im EntityQuery-Objekt implementiert. Warum schaust du dir nicht einfach den Quellcode an und implementierst das Gleiche? Im Grunde müssen Sie den Parameter min und max übergeben, wenn Sie die nächste Seite sagen, und in Ihrem 'query.firstResult (min) .maxResult (max)' angeben –