Paginierung ist in der Tat einfach. Sie müssen lediglich einen oder zwei Parameter übergeben: firstrow
und optional rowcount
(die auch auf der Serverseite gespeichert werden können). Wenn der Endbenutzer auf Next klickt, erhöhen Sie einfach den Wert firstrow
mit dem Wert rowcount
. Wenn der Endbenutzer auf Zurück klickt, dekrementieren Sie einfach den Wert firstrow
mit dem Wert rowcount
. Sie müssen nur prüfen, ob die Grenzen von 0
und totalrows
nicht überschritten werden, und entsprechend ändern.
Dann, basierend auf den gewünschten firstrow
und rowcount
, wissen Sie genau, welche Daten angezeigt werden. Wenn alle Daten bereits in einigen List
im Java-Speicher sind, dann verwenden Sie einfach List#subList()
, um eine Unterliste von ihm zur Anzeige zu erhalten. Es ist jedoch nicht effizient, die gesamte Datenbanktabelle in den Speicher von Java zu duplizieren. Es kann nicht schaden, wenn es nur 100 Zeilen sind, aber wenn es viel mehr ist und/oder du es für jeden einzelnen Benutzer duplizierst, dann wird der Anwendung sehr bald der Speicher ausgehen.
In diesem Fall möchten Sie lieber auf DB-Ebene paginieren. In MySQL können Sie beispielsweise die LIMIT
-Klausel verwenden, um eine Teilmenge der Ergebnisse aus der DB zu erhalten. JPA/Hibernate bietet sogar Möglichkeiten, setFirstResult()
und setMaxResults()
Methoden von Query
bzw. Criteria
zu verwenden. Sie finden Beispiele in this und this Antwort.
Sie können ein grundlegendes Kickoff-Beispiel für Google-ähnliche Paginierung (und Sortierung) in JSF 1.2 in this article finden. Es verwendet Tomahawk-Komponenten, aber in JSF 2.0 können Sie sie einfach weglassen, indem Sie die Bean @ViewScoped
(ersetzt t:saveState
) und ui:repeat
(ersetzt t:dataList
) verwenden.
Last but not least, gibt es viele Komponentenbibliotheken, die alle Arbeiten in einer einzigen Komponente erledigen. Zum Beispiel RichFaces<rich:datascroller>
und PrimeFaces<p:dataTable paginator="true">
(kann auch ajaxical getan werden).
Verwenden Sie Richfaces in Ihrer Anwendung? –
Ich nicht. Aber ich könnte, wenn das mir hilft :-) – Sven