Ich versuche herauszufinden, wie man echte Paginierung mit richfaces datascroller tun kann.Richfaces 3 wie man datascroller echte Paginierung macht
Derzeit zieht meine Abfrage alle Daten aus einer Tabelle und ich will es so, wenn Sie auf die nächste Schaltfläche des Datascroller klicken, wird es die Datenbank für die nächsten 20 Zeilen abfragen.
Ich verstehe, wie Sie die Abfrage schreiben, um die Zeilen zu begrenzen, aber ich bin mir nicht sicher, wie man die nächste Schaltfläche des datascroller ruft, um eine bestimmte Methode aufzurufen.
Ich sehe, es gibt viele Leute, die auf den Richfaces-Foren mit möglichen Lösungen veröffentlichen, aber sie alle verwenden ein DataModel. Da ich kein ORM verwende, bin ich nicht sicher, wie ich diese Lösungen zu dem, was ich habe, passen kann.
Jede Hilfe wird geschätzt.
<rich:extendedDataTable id="resultsTable" value="#{tableBacking.results}" var="results" sortMode="single" rowKeyVar="row">
<rich:columns value="#{tableBacking.columns == null ? '' : tableBacking.columns}" var="columns" index="ind" id="column#{ind}" sortBy="#{results[ind].data}" rendered="#{tableBacking.columns != null}">
<f:facet name="header">
<h:outputText value="#{columns.columnDescription}" />
</f:facet>
<h:outputText value="#{results[ind].data}" />
</rich:columns>
</rich:extendedDataTable>
<rich:datascroller for="resultsTable" page="#{tableBacking.page}" renderIfSinglePage="false" />
bean Backing
public class TableBacking {
private List<List<TableData>> results = null;
private int page = 0;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public List<List<TableData>> getResults() throws Exception {
return results;
}
public void setResults(List<List<TableData>> results) {
this.results = results;
}
private void getData(String whereClause) {
try {
DataDao dd = new DataDao();
results = dd.getData(); // dd.getData just runs a query on a table and puts the results in a List of lists.
} catch (Exception e) {}
}
Das Problem, das ich mit dieser Lösung habe, ist, dass die datascroller Rendering nicht, weil ich meine Datatable Zeilen 20 und beim Laden der Seite werden nur 20 Zeilen angezeigt. Weißt du, wie du das umgehen kannst? Gibt es eine Möglichkeit, dem Datascroller die maximale Anzahl von Zeilen mitzuteilen, damit er weiß, wie viele Seiten berechnet werden müssen? – Catfish
Ich bin mir nicht sicher, ob ich verstehe, was Sie mit "' Sie können nur die IDs der Elemente auf den Rest der Seiten laden und später, wenn Sie auf die Seite zugreifen, laden sie basierend auf der ID " – Catfish
Sie hat gesagt, dass Sie kein ORM verwenden. Ich habe diese Lösung mit Hibernate verwendet, indem ich die ganzen Daten, aber einige Attribute beim Lazy Loading geladen habe. Wenn ich eine Seite anfordere, kann ich diese Objekte laden und Lazy Load Ausnahmen verhindern. In Ihrem Fall denke ich, dass Sie * unechte * Objekte (denen nur das ID-Attribut zugewiesen sein muss) auf nicht sichtbaren Seiten speichern können. Wie erreiche ich das? Die gesamte ID-Liste von Anfang an laden und die relativen Informationen nur dann mitnehmen, wenn sie benötigt werden. Ich weiß nicht, wie dein Modell funktioniert, ich gebe nur eine Idee. –