impaginazione è infatti facile. Devi solo passare uno o due parametri in giro: firstrow
e facoltativamente rowcount
(che può anche essere tenuto sul lato server). Quando l'utente finale fa clic su Avanti, è sufficiente incrementare il valore di firstrow
con il valore di rowcount
. Quando l'utente finale fa clic su Indietro, si diminuisce il valore di firstrow
con il valore di rowcount
. Hai solo bisogno di controllare se non supera i confini di 0
e totalrows
e modificare di conseguenza.
Quindi, in base allo firstrow
e rowcount
desiderato, è possibile conoscere esattamente quali dati visualizzare. Se tutti i dati sono già presenti in alcuni List
nella memoria Java, è sufficiente utilizzare List#subList()
per ottenere una sottolista da esso per la visualizzazione. Tuttavia, non è efficiente duplicare l'intera tabella del database nella memoria di Java. Non può danneggiare quando è solo 100 righe, ma quando è molto più di questo e/o lo si duplica per ogni singolo utente, l'applicazione esaurirà la memoria molto presto.
In questo caso preferisci impaginare a livello di DB. Ad esempio, per MySQL è possibile utilizzare la clausola LIMIT
per ottenere un sottoinsieme di risultati dal DB. JPA/Hibernate fornisce anche modi utilizzando i metodi setFirstResult()
e setMaxResults()
di Query
e Criteria
rispettivamente. È possibile trovare esempi nella risposta this e this.
È possibile trovare un esempio di kickoff di base JSF 1.2 mirato di paginazione (e ordinamento) simile a Google in this article. Utilizza i componenti Tomahawk, ma in JSF 2.0 puoi semplicemente lasciarli fuori facendo il bean @ViewScoped
(sostituisce t:saveState
) e usando ui:repeat
(sostituisce t:dataList
).
Ultimo ma non meno importante, ci sono molte librerie di componenti che fanno tutto il lavoro in un singolo componente. Ad esempio RichFaces<rich:datascroller>
e PrimeFaces<p:dataTable paginator="true">
(può anche essere fatto ajaxical).
Usi le interfacce nell'applicazione? –
Io no. Ma potrei se ciò mi aiuta :-) – Sven