Sto cercando di capire come eseguire la paginazione vera con il datascroller di Richfaces.Richfaces 3 come fare che il datascroller esegua la paginazione vera
Attualmente la mia query recupera tutti i dati da una tabella e lo voglio così quando si fa clic sul prossimo pulsante del datascroller, interrogherà il db per le 20 righe successive.
Capisco come scrivere la query per limitare le righe, ma non sono sicuro di come ottenere il prossimo pulsante del datascroller per chiamare un metodo specifico.
Vedo che ci sono molte persone che postano nei forum di Richfaces con potenziali soluzioni, ma tutti usano un dataModel. Dal momento che non sto usando un ORM, non sono sicuro di come posso adattare queste soluzioni a quello che ho.
Qualsiasi aiuto è apprezzato.
<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" />
Backup fagioli
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) {}
}
Il problema che sto avendo con questa soluzione è che il datascroller non viene eseguito il rendering perché ho il mio file dataTable impostato su 20 e quando la pagina viene caricata, riceve solo 20 righe. Sai come aggirare questo? C'è un modo per dire al datascroller il numero massimo di righe in modo da sapere quante pagine calcolare? – Catfish
Non sono sicuro di capire cosa intendi con "" puoi caricare solo gli id degli elementi sul resto delle pagine e più tardi quando accedi alla pagina caricarli in base all'ID " – Catfish
You ha detto che non stai usando un ORM. Ho usato questa soluzione con Hibernate, caricando tutti i dati ma alcuni attributi nel caricamento lazy, con questo, quando richiedo qualche pagina posso caricare quegli oggetti e prevenire le eccezioni di load lazy. Nel tuo caso, penso che tu possa memorizzare * oggetti falsi * (che avranno solo l'attributo id assegnato) in pagine non visibili. Come raggiungerlo? Caricare l'intera lista di identificazione dall'inizio e prendere le informazioni relative solo quando è necessario. Non so come funzioni il tuo modello, mi viene solo un'idea. –